if (!AmCharts) var AmCharts = {};
AmCharts.inheriting = {};
AmCharts.Class = function (a) {
    var b = function () {
        arguments[0] !== AmCharts.inheriting && (this.events = {}, this.construct.apply(this, arguments))
    };
    a.inherits ? (b.prototype = new a.inherits(AmCharts.inheriting), b.base = a.inherits.prototype, delete a.inherits) : (b.prototype.createEvents = function () {
        for (var a = 0, b = arguments.length; a < b; a++) this.events[arguments[a]] = []
    }, b.prototype.listenTo = function (a, b, c) {
        a.events[b].push({
            handler: c,
            scope: this
        })
    }, b.prototype.addListener = function (a, b, c) {
        this.events[a].push({
            handler: b,
            scope: c
        })
    }, b.prototype.removeListener = function (a, b, c) {
        a = a.events[b];
        for (b = a.length - 1; 0 <= b; b--) a[b].handler === c && a.splice(b, 1)
    }, b.prototype.fire = function (a, b) {
        for (var c = this.events[a], g = 0, h = c.length; g < h; g++) {
            var k = c[g];
            k.handler.call(k.scope, b)
        }
    });
    for (var c in a) b.prototype[c] = a[c];
    return b
};
AmCharts.charts = [];
AmCharts.addChart = function (a) {
    AmCharts.charts.push(a)
};
AmCharts.removeChart = function (a) {
    for (var b = AmCharts.charts, c = b.length - 1; 0 <= c; c--) b[c] == a && b.splice(c, 1)
};
AmCharts.IEversion = 0; - 1 != navigator.appVersion.indexOf("MSIE") && document.documentMode && (AmCharts.IEversion = Number(document.documentMode));
if (document.addEventListener || window.opera) AmCharts.isNN = !0,
AmCharts.isIE = !1,
AmCharts.dx = 0.5,
AmCharts.dy = 0.5;
document.attachEvent && (AmCharts.isNN = !1, AmCharts.isIE = !0, 9 > AmCharts.IEversion && (AmCharts.dx = 0, AmCharts.dy = 0));
window.chrome && (AmCharts.chrome = !0);
AmCharts.handleResize = function () {
    for (var a = AmCharts.charts, b = 0; b < a.length; b++) {
        var c = a[b];
        c && c.div && c.handleResize()
    }
};
AmCharts.handleMouseUp = function (a) {
    for (var b = AmCharts.charts, c = 0; c < b.length; c++) {
        var d = b[c];
        d && d.handleReleaseOutside(a)
    }
};
AmCharts.handleMouseMove = function (a) {
    for (var b = AmCharts.charts, c = 0; c < b.length; c++) {
        var d = b[c];
        d && d.handleMouseMove(a)
    }
};
AmCharts.resetMouseOver = function () {
    for (var a = AmCharts.charts, b = 0; b < a.length; b++) {
        var c = a[b];
        c && (c.mouseIsOver = !1)
    }
};
AmCharts.onReadyArray = [];
AmCharts.ready = function (a) {
    AmCharts.onReadyArray.push(a)
};
AmCharts.handleLoad = function () {
    for (var a = AmCharts.onReadyArray, b = 0; b < a.length; b++)(0, a[b])()
};
AmCharts.useUTC = !1;
AmCharts.updateRate = 40;
AmCharts.uid = 0;
AmCharts.getUniqueId = function () {
    AmCharts.uid++;
    return "AmChartsEl-" + AmCharts.uid
};
AmCharts.isNN && (document.addEventListener("mousemove", AmCharts.handleMouseMove, !0), window.addEventListener("resize", AmCharts.handleResize, !0), document.addEventListener("mouseup", AmCharts.handleMouseUp, !0), window.addEventListener("load", AmCharts.handleLoad, !0));
AmCharts.isIE && (document.attachEvent("onmousemove", AmCharts.handleMouseMove), window.attachEvent("onresize", AmCharts.handleResize), document.attachEvent("onmouseup", AmCharts.handleMouseUp), window.attachEvent("onload", AmCharts.handleLoad));
AmCharts.clear = function () {
    var a = AmCharts.charts;
    if (a) for (var b = 0; b < a.length; b++) a[b].clear();
    AmCharts.charts = null;
    AmCharts.isNN && (document.removeEventListener("mousemove", AmCharts.handleMouseMove, !0), window.removeEventListener("resize", AmCharts.handleResize, !0), document.removeEventListener("mouseup", AmCharts.handleMouseUp, !0), window.removeEventListener("load", AmCharts.handleLoad, !0));
    AmCharts.isIE && (document.detachEvent("onmousemove", AmCharts.handleMouseMove), window.detachEvent("onresize", AmCharts.handleResize), document.detachEvent("onmouseup", AmCharts.handleMouseUp), window.detachEvent("onload", AmCharts.handleLoad))
};
AmCharts.AmChart = AmCharts.Class({
    construct: function () {
        this.version = "2.10.7";
        AmCharts.addChart(this);
        this.createEvents("dataUpdated", "init", "rendered");
        this.height = this.width = "100%";
        this.dataChanged = !0;
        this.chartCreated = !1;
        this.previousWidth = this.previousHeight = 0;
        this.backgroundColor = "#FFFFFF";
        this.borderAlpha = this.backgroundAlpha = 0;
        this.color = this.borderColor = "#000000";
        this.fontFamily = "Verdana";
        this.fontSize = 11;
        this.numberFormatter = {
            precision: -1,
            decimalSeparator: ".",
            thousandsSeparator: ","
        };
        this.percentFormatter = {
            precision: 2,
            decimalSeparator: ".",
            thousandsSeparator: ","
        };
        this.labels = [];
        this.allLabels = [];
        this.titles = [];
        this.marginRight = this.marginLeft = this.autoMarginOffset = 0;
        this.timeOuts = [];
        var a = document.createElement("div"),
            b = a.style;
        b.overflow = "hidden";
        b.position = "relative";
        b.textAlign = "left";
        this.chartDiv = a;
        a = document.createElement("div");
        b = a.style;
        b.overflow = "hidden";
        b.position = "relative";
        b.textAlign = "left";
        this.legendDiv = a;
        this.balloon = new AmCharts.AmBalloon;
        this.balloon.chart = this;
        this.titleHeight = 0;
        this.prefixesOfBigNumbers = [{
                number: 1E3,
                prefix: "k"
            },
            {
                number: 1E6,
                prefix: "M"
            },
            {
                number: 1E9,
                prefix: "G"
            },
            {
                number: 1E12,
                prefix: "T"
            },
            {
                number: 1E15,
                prefix: "P"
            },
            {
                number: 1E18,
                prefix: "E"
            },
            {
                number: 1E21,
                prefix: "Z"
            },
            {
                number: 1E24,
                prefix: "Y"
            }];
        this.prefixesOfSmallNumbers = [{
                number: 1E-24,
                prefix: "y"
            },
            {
                number: 1E-21,
                prefix: "z"
            },
            {
                number: 1E-18,
                prefix: "a"
            },
            {
                number: 1E-15,
                prefix: "f"
            },
            {
                number: 1E-12,
                prefix: "p"
            },
            {
                number: 1E-9,
                prefix: "n"
            },
            {
                number: 1E-6,
                prefix: "\u03bc"
            },
            {
                number: 0.001,
                prefix: "m"
            }];
        this.panEventsEnabled = !1;
        AmCharts.bezierX =
        3;
        AmCharts.bezierY = 6;
        this.product = "amcharts"
    },
    drawChart: function () {
        this.drawBackground();
        this.redrawLabels();
        this.drawTitles()
    },
    drawBackground: function () {
        AmCharts.remove(this.background);
        var a = this.container,
            b = this.backgroundColor,
            c = this.backgroundAlpha,
            d = this.set,
            e = this.updateWidth();
        this.realWidth = e;
        var f = this.updateHeight();
        this.realHeight = f;
        this.background = b = AmCharts.polygon(a, [0, e - 1, e - 1, 0], [0, 0, f - 1, f - 1], b, c, 1, this.borderColor, this.borderAlpha);
        d.push(b);
        if (b = this.backgroundImage) this.path && (b =
            this.path + b),
        this.bgImg = a = a.image(b, 0, 0, e, f),
        d.push(a)
    },
    drawTitles: function () {
        var a = this.titles;
        if (AmCharts.ifArray(a)) {
            var b = 20,
                c;
            for (c = 0; c < a.length; c++) {
                    var d = a[c],
                        e = d.color;
                    void 0 === e && (e = this.color);
                    var f = d.size;
                    isNaN(d.alpha);
                    var g = this.marginLeft,
                        e = AmCharts.text(this.container, d.text, e, this.fontFamily, f);
                    e.translate(g + (this.realWidth - this.marginRight - g) / 2, b);
                    g = !0;
                    void 0 !== d.bold && (g = d.bold);
                    g && e.attr({
                            "font-weight": "bold"
                        });
                    b += f + 6;
                    this.freeLabelsSet.push(e)
                }
        }
    },
    write: function (a) {
        var b = this.balloon;
        b && !b.chart && (b.chart = this);
        a = "object" != typeof a ? document.getElementById(a) : a;
        a.innerHTML = "";
        this.div = a;
        a.style.overflow = "hidden";
        a.style.textAlign = "left";
        var b = this.chartDiv,
            c = this.legendDiv,
            d = this.legend,
            e = c.style,
            f = b.style;
        this.measure();
        var g, h;
        if (d) switch (d.position) {
            case "bottom":
                a.appendChild(b);
                a.appendChild(c);
                break;
            case "top":
                a.appendChild(c);
                a.appendChild(b);
                break;
            case "absolute":
                g = document.createElement("div");
                h = g.style;
                h.position = "relative";
                h.width = a.style.width;
                h.height = a.style.height;
                a.appendChild(g);
                e.position = "absolute";
                f.position = "absolute";
                void 0 !== d.left && (e.left = d.left + "px");
                void 0 !== d.right && (e.right = d.right + "px");
                void 0 !== d.top && (e.top = d.top + "px");
                void 0 !== d.bottom && (e.bottom = d.bottom + "px");
                d.marginLeft = 0;
                d.marginRight = 0;
                g.appendChild(b);
                g.appendChild(c);
                break;
            case "right":
                g = document.createElement("div");
                h = g.style;
                h.position = "relative";
                h.width = a.style.width;
                h.height = a.style.height;
                a.appendChild(g);
                e.position = "relative";
                f.position = "absolute";
                g.appendChild(b);
                g.appendChild(c);
                break;
            case "left":
                g = document.createElement("div");
                h = g.style;
                h.position = "relative";
                h.width = a.style.width;
                h.height = a.style.height;
                a.appendChild(g);
                e.position = "absolute";
                f.position = "relative";
                g.appendChild(b);
                g.appendChild(c);
                break;
            case "outside":
                a.appendChild(b)
            } else a.appendChild(b);
        this.listenersAdded || (this.addListeners(), this.listenersAdded = !0);
        this.initChart()
    },
    createLabelsSet: function () {
        AmCharts.remove(this.labelsSet);
        this.labelsSet = this.container.set();
        this.freeLabelsSet.push(this.labelsSet)
    },
    initChart: function () {
        this.divIsFixed = AmCharts.findIfFixed(this.chartDiv);
        this.previousHeight = this.divRealHeight;
        this.previousWidth = this.divRealWidth;
        this.destroy();
        var a = 0;
        document.attachEvent && !window.opera && (a = 1);
        this.dmouseX = this.dmouseY = 0;
        var b = document.getElementsByTagName("html")[0];
        b && window.getComputedStyle && (b = window.getComputedStyle(b, null)) && (this.dmouseY = AmCharts.removePx(b.getPropertyValue("margin-top")), this.dmouseX = AmCharts.removePx(b.getPropertyValue("margin-left")));
        this.mouseMode =
        a;
        this.container = new AmCharts.AmDraw(this.chartDiv, this.realWidth, this.realHeight);
        if (AmCharts.VML || AmCharts.SVG) a = this.container,
        this.set = a.set(),
        this.gridSet = a.set(),
        this.graphsBehindSet = a.set(),
        this.bulletBehindSet = a.set(),
        this.columnSet = a.set(),
        this.graphsSet = a.set(),
        this.trendLinesSet = a.set(),
        this.axesLabelsSet = a.set(),
        this.axesSet = a.set(),
        this.cursorSet = a.set(),
        this.scrollbarsSet = a.set(),
        this.bulletSet = a.set(),
        this.freeLabelsSet = a.set(),
        this.balloonsSet = a.set(),
        this.balloonsSet.setAttr("id", "balloons"),
        this.zoomButtonSet = a.set(),
        this.linkSet = a.set(),
        this.drb(),
        this.renderFix()
    },
    measure: function () {
        var a = this.div,
            b = this.chartDiv,
            c = a.offsetWidth,
            d = a.offsetHeight,
            e = this.container;
        a.clientHeight && (c = a.clientWidth, d = a.clientHeight);
        var f = AmCharts.removePx(AmCharts.getStyle(a, "padding-left")),
            g = AmCharts.removePx(AmCharts.getStyle(a, "padding-right")),
            h = AmCharts.removePx(AmCharts.getStyle(a, "padding-top")),
            k = AmCharts.removePx(AmCharts.getStyle(a, "padding-bottom"));
        isNaN(f) || (c -= f);
        isNaN(g) || (c -= g);
        isNaN(h) || (d -= h);
        isNaN(k) || (d -= k);
        f = a.style;
        a = f.width;
        f = f.height; - 1 != a.indexOf("px") && (c = AmCharts.removePx(a)); - 1 != f.indexOf("px") && (d = AmCharts.removePx(f));
        a = AmCharts.toCoordinate(this.width, c);
        f = AmCharts.toCoordinate(this.height, d);
        if (a != this.previousWidth || f != this.previousHeight) b.style.width = a + "px",
        b.style.height = f + "px",
        e && e.setSize(a, f),
        this.balloon.setBounds(2, 2, a - 2, f);
        this.realWidth = a;
        this.realHeight = f;
        this.divRealWidth = c;
        this.divRealHeight = d
    },
    destroy: function () {
        this.chartDiv.innerHTML = "";
        this.clearTimeOuts()
    },
    clearTimeOuts: function () {
        var a = this.timeOuts;
        if (a) {
            var b;
            for (b = 0; b < a.length; b++) clearTimeout(a[b])
        }
        this.timeOuts = []
    },
    clear: function (a) {
        AmCharts.callMethod("clear", [this.chartScrollbar, this.scrollbarV, this.scrollbarH, this.chartCursor]);
        this.chartCursor = this.scrollbarH = this.scrollbarV = this.chartScrollbar = null;
        this.clearTimeOuts();
        this.container && (this.container.remove(this.chartDiv), this.container.remove(this.legendDiv));
        a || AmCharts.removeChart(this)
    },
    setMouseCursor: function (a) {
        "auto" == a && AmCharts.isNN && (a = "default");
        this.chartDiv.style.cursor = a;
        this.legendDiv.style.cursor = a
    },
    redrawLabels: function () {
        this.labels = [];
        var a = this.allLabels;
        this.createLabelsSet();
        var b;
        for (b = 0; b < a.length; b++) this.drawLabel(a[b])
    },
    drawLabel: function (a) {
        if (this.container) {
            var b = a.y,
                c = a.text,
                d = a.align,
                e = a.size,
                f = a.color,
                g = a.rotation,
                h = a.alpha,
                k = a.bold,
                l = AmCharts.toCoordinate(a.x, this.realWidth),
                b = AmCharts.toCoordinate(b, this.realHeight);
            l || (l = 0);
            b || (b = 0);
            void 0 === f && (f = this.color);
            isNaN(e) && (e = this.fontSize);
            d || (d = "start");
            "left" == d && (d = "start");
            "right" == d && (d = "end");
            "center" == d && (d = "middle", g ? b = this.realHeight - b + b / 2 : l = this.realWidth / 2 - l);
            void 0 === h && (h = 1);
            void 0 === g && (g = 0);
            b += e / 2;
            c = AmCharts.text(this.container, c, f, this.fontFamily, e, d, k, h);
            c.translate(l, b);
            0 !== g && c.rotate(g);
            a.url && (c.setAttr("cursor", "pointer"), c.click(function () {
                    AmCharts.getURL(a.url)
                }));
            this.labelsSet.push(c);
            this.labels.push(c)
        }
    },
    addLabel: function (a, b, c, d, e, f, g, h, k, l) {
        a = {
            x: a,
            y: b,
            text: c,
            align: d,
            size: e,
            color: f,
            alpha: h,
            rotation: g,
            bold: k,
            url: l
        };
        this.container && this.drawLabel(a);
        this.allLabels.push(a)
    },
    clearLabels: function () {
        var a = this.labels,
            b;
        for (b = a.length - 1; 0 <= b; b--) a[b].remove();
        this.labels = [];
        this.allLabels = []
    },
    updateHeight: function () {
        var a = this.divRealHeight,
            b = this.legend;
        if (b) {
                var c = this.legendDiv.offsetHeight,
                    b = b.position;
                if ("top" == b || "bottom" == b) a -= c,
                0 > a && (a = 0),
                this.chartDiv.style.height = a + "px"
            }
        return a
    },
    updateWidth: function () {
        var a = this.divRealWidth,
            b = this.divRealHeight,
            c = this.legend;
        if (c) {
                var d = this.legendDiv,
                    e = d.offsetWidth,
                    f = d.offsetHeight,
                    d = d.style,
                    g = this.chartDiv.style,
                    c = c.position;
                if ("right" == c || "left" == c) a -= e,
                0 > a && (a = 0),
                g.width = a + "px",
                "left" == c ? g.left = e + "px" : d.left = a + "px",
                d.top = (b - f) / 2 + "px"
            }
        return a
    },
    getTitleHeight: function () {
        var a = 0,
            b = this.titles;
        if (0 < b.length) {
                var a = 15,
                    c;
                for (c = 0; c < b.length; c++) a += b[c].size + 6
            }
        return a
    },
    addTitle: function (a, b, c, d, e) {
        isNaN(b) && (b = this.fontSize + 2);
        a = {
            text: a,
            size: b,
            color: c,
            alpha: d,
            bold: e
        };
        this.titles.push(a);
        return a
    },
    addListeners: function () {
        var a = this,
            b = a.chartDiv;
        AmCharts.isNN && (a.panEventsEnabled && "ontouchstart" in document.documentElement && (b.addEventListener("touchstart", function (b) {
                a.handleTouchMove.call(a, b);
                a.handleTouchStart.call(a, b)
            }, !0), b.addEventListener("touchmove", function (b) {
                a.handleTouchMove.call(a, b)
            }, !0), b.addEventListener("touchend", function (b) {
                a.handleTouchEnd.call(a, b)
            }, !0)), b.addEventListener("mousedown", function (b) {
                a.handleMouseDown.call(a, b)
            }, !0), b.addEventListener("mouseover", function (b) {
                a.handleMouseOver.call(a, b)
            }, !0), b.addEventListener("mouseout", function (b) {
                a.handleMouseOut.call(a, b)
            }, !0));
        AmCharts.isIE && (b.attachEvent("onmousedown", function (b) {
                a.handleMouseDown.call(a, b)
            }), b.attachEvent("onmouseover", function (b) {
                a.handleMouseOver.call(a, b)
            }), b.attachEvent("onmouseout", function (b) {
                a.handleMouseOut.call(a, b)
            }))
    },
    dispDUpd: function () {
        var a;
        this.dispatchDataUpdated && (this.dispatchDataUpdated = !1, a = "dataUpdated", this.fire(a, {
            type: a,
            chart: this
        }));
        this.chartCreated || (a = "init", this.fire(a, {
            type: a,
            chart: this
        }));
        this.chartRendered || (a = "rendered", this.fire(a, {
            type: a,
            chart: this
        }), this.chartRendered = !0)
    },
    drb: function () {
        var a = this.product,
            b = a + ".com",
            c = window.location.hostname.split("."),
            d;
        2 <= c.length && (d = c[c.length - 2] + "." + c[c.length - 1]);
        AmCharts.remove(this.bbset);
        if (d == b) {
                var b = b + "/?utm_source=swf&utm_medium=demo&utm_campaign=jsDemo" + a,
                    e = "chart by ",
                    c = 145;
                "ammap" == a && (e = "tool by ", c = 125);
                d = AmCharts.rect(this.container, c, 20, "#FFFFFF", 1);
                e = AmCharts.text(this.container, e + a + ".com", "#000000", "Verdana", 11, "start");
                e.translate(7, 9);
                d = this.container.set([d, e]);
                "ammap" == a && d.translate(this.realWidth - c, 0);
                this.bbset = d;
                this.linkSet.push(d);
                d.setAttr("cursor", "pointer");
                d.click(function () {
                        window.location.href = "http://" + b
                    });
                for (a = 0; a < d.length; a++) d[a].attr({
                        cursor: "pointer"
                    })
            }
    },
    validateSize: function () {
        var a = this;
        a.measure();
        var b = a.legend;
        if ((a.realWidth != a.previousWidth || a.realHeight != a.previousHeight) && 0 < a.realWidth && 0 < a.realHeight) {
            a.sizeChanged = !0;
            if (b) {
                clearTimeout(a.legendInitTO);
                var c = setTimeout(function () {
                    b.invalidateSize()
                }, 100);
                a.timeOuts.push(c);
                a.legendInitTO = c
            }
            a.marginsUpdated = "xy" != a.chartType ? !1 : !0;
            clearTimeout(a.initTO);
            c = setTimeout(function () {
                a.initChart()
            }, 150);
            a.timeOuts.push(c);
            a.initTO = c
        }
        a.renderFix();
        b && b.renderFix()
    },
    invalidateSize: function () {
        this.previousHeight = this.previousWidth = NaN;
        this.invalidateSizeReal()
    },
    invalidateSizeReal: function () {
        var a = this;
        a.marginsUpdated = !1;
        clearTimeout(a.validateTO);
        var b = setTimeout(function () {
            a.validateSize()
        }, 5);
        a.timeOuts.push(b);
        a.validateTO = b
    },
    validateData: function (a) {
        this.chartCreated && (this.dataChanged = !0, this.marginsUpdated = "xy" != this.chartType ? !1 : !0, this.initChart(a))
    },
    validateNow: function () {
        this.listenersAdded = !1;
        this.write(this.div)
    },
    showItem: function (a) {
        a.hidden = !1;
        this.initChart()
    },
    hideItem: function (a) {
        a.hidden = !0;
        this.initChart()
    },
    hideBalloon: function () {
        var a = this;
        a.hoverInt = setTimeout(function () {
            a.hideBalloonReal.call(a)
        }, 80)
    },
    cleanChart: function () {},
    hideBalloonReal: function () {
        var a = this.balloon;
        a && a.hide()
    },
    showBalloon: function (a, b, c, d, e) {
        var f = this;
        clearTimeout(f.balloonTO);
        f.balloonTO = setTimeout(function () {
            f.showBalloonReal.call(f, a, b, c, d, e)
        }, 1)
    },
    showBalloonReal: function (a, b, c, d, e) {
        this.handleMouseMove();
        var f = this.balloon;
        f.enabled && (f.followCursor(!1), f.changeColor(b), c || f.setPosition(d, e), f.followCursor(c), a && f.showBalloon(a))
    },
    handleTouchMove: function (a) {
        this.hideBalloon();
        var b = this.chartDiv;
        a.touches && (a = a.touches.item(0), this.mouseX = a.pageX - AmCharts.findPosX(b), this.mouseY = a.pageY - AmCharts.findPosY(b))
    },
    handleMouseOver: function (a) {
        AmCharts.resetMouseOver();
        this.mouseIsOver = !0
    },
    handleMouseOut: function (a) {
        AmCharts.resetMouseOver();
        this.mouseIsOver = !1
    },
    handleMouseMove: function (a) {
        if (this.mouseIsOver) {
            var b = this.chartDiv;
            a || (a = window.event);
            var c, d;
            if (a) {
                this.posX = AmCharts.findPosX(b);
                this.posY = AmCharts.findPosY(b);
                switch (this.mouseMode) {
                case 1:
                    c = a.clientX - this.posX;
                    d = a.clientY - this.posY;
                    if (!this.divIsFixed) {
                        var b = document.body,
                            e, f;
                        b && (e = b.scrollLeft, y1 = b.scrollTop);
                        if (b = document.documentElement) f = b.scrollLeft,
                        y2 = b.scrollTop;
                        e = Math.max(e, f);
                        f = Math.max(y1, y2);
                        c += e;
                        d += f
                    }
                    break;
                case 0:
                    this.divIsFixed ? (c = a.clientX - this.posX, d = a.clientY - this.posY) : (c = a.pageX - this.posX, d = a.pageY - this.posY)
                }
                a.touches && (a = a.touches.item(0), c = a.pageX - this.posX, d = a.pageY - this.posY);
                this.mouseX = c - this.dmouseX;
                this.mouseY = d - this.dmouseY
            }
        }
    },
    handleTouchStart: function (a) {
        this.handleMouseDown(a)
    },
    handleTouchEnd: function (a) {
        AmCharts.resetMouseOver();
        this.handleReleaseOutside(a)
    },
    handleReleaseOutside: function (a) {},
    handleMouseDown: function (a) {
        AmCharts.resetMouseOver();
        this.mouseIsOver = !0;
        a && a.preventDefault && a.preventDefault()
    },
    addLegend: function (a, b) {
        AmCharts.extend(a, new AmCharts.AmLegend);
        var c;
        c = "object" != typeof b ? document.getElementById(b) : b;
        this.legend = a;
        a.chart = this;
        c ? (a.div = c, a.position = "outside", a.autoMargins = !1) : a.div = this.legendDiv;
        c = this.handleLegendEvent;
        this.listenTo(a, "showItem", c);
        this.listenTo(a, "hideItem", c);
        this.listenTo(a, "clickMarker", c);
        this.listenTo(a, "rollOverItem", c);
        this.listenTo(a, "rollOutItem", c);
        this.listenTo(a, "rollOverMarker", c);
        this.listenTo(a, "rollOutMarker", c);
        this.listenTo(a, "clickLabel", c)
    },
    removeLegend: function () {
        this.legend =
        void 0;
        this.legendDiv.innerHTML = ""
    },
    handleResize: function () {
        (AmCharts.isPercents(this.width) || AmCharts.isPercents(this.height)) && this.invalidateSizeReal();
        this.renderFix()
    },
    renderFix: function () {
        if (!AmCharts.VML) {
            var a = this.container;
            a && a.renderFix()
        }
    },
    getSVG: function () {
        if (AmCharts.hasSVG) return this.container
    }
});
AmCharts.Slice = AmCharts.Class({
    construct: function () {}
});
AmCharts.SerialDataItem = AmCharts.Class({
    construct: function () {}
});
AmCharts.GraphDataItem = AmCharts.Class({
    construct: function () {}
});
AmCharts.Guide = AmCharts.Class({
    construct: function () {}
});
AmCharts.toBoolean = function (a, b) {
    if (void 0 === a) return b;
    switch (String(a).toLowerCase()) {
    case "true":
    case "yes":
    case "1":
        return !0;
    case "false":
    case "no":
    case "0":
    case null:
        return !1;
    default:
        return Boolean(a)
    }
};
AmCharts.removeFromArray = function (a, b) {
    var c;
    for (c = a.length - 1; 0 <= c; c--) a[c] == b && a.splice(c, 1)
};
AmCharts.getStyle = function (a, b) {
    var c = "";
    document.defaultView && document.defaultView.getComputedStyle ? c = document.defaultView.getComputedStyle(a, "").getPropertyValue(b) : a.currentStyle && (b = b.replace(/\-(\w)/g, function (a, b) {
        return b.toUpperCase()
    }), c = a.currentStyle[b]);
    return c
};
AmCharts.removePx = function (a) {
    return Number(a.substring(0, a.length - 2))
};
AmCharts.getURL = function (a, b) {
    if (a) if ("_self" != b && b) if ("_top" == b && window.top) window.top.location.href = a;
    else if ("_parent" == b && window.parent) window.parent.location.href = a;
    else {
        var c = document.getElementsByName(b)[0];
        c ? c.src = a : window.open(a)
    } else window.location.href = a
};
AmCharts.formatMilliseconds = function (a, b) {
    if (-1 != a.indexOf("fff")) {
        var c = b.getMilliseconds(),
            d = String(c);
        10 > c && (d = "00" + c);
        10 <= c && 100 > c && (d = "0" + c);
        a = a.replace(/fff/g, d)
    }
    return a
};
AmCharts.ifArray = function (a) {
    return a && 0 < a.length ? !0 : !1
};
AmCharts.callMethod = function (a, b) {
    var c;
    for (c = 0; c < b.length; c++) {
        var d = b[c];
        if (d) {
            if (d[a]) d[a]();
            var e = d.length;
            if (0 < e) {
                var f;
                for (f = 0; f < e; f++) {
                    var g = d[f];
                    if (g && g[a]) g[a]()
                }
            }
        }
    }
};
AmCharts.toNumber = function (a) {
    return "number" == typeof a ? a : Number(String(a).replace(/[^0-9\-.]+/g, ""))
};
AmCharts.toColor = function (a) {
    if ("" !== a && void 0 !== a) if (-1 != a.indexOf(",")) {
        a = a.split(",");
        var b;
        for (b = 0; b < a.length; b++) {
            var c = a[b].substring(a[b].length - 6, a[b].length);
            a[b] = "#" + c
        }
    } else a = a.substring(a.length - 6, a.length),
    a = "#" + a;
    return a
};
AmCharts.toCoordinate = function (a, b, c) {
    var d;
    void 0 !== a && (a = String(a), c && c < b && (b = c), d = Number(a), -1 != a.indexOf("!") && (d = b - Number(a.substr(1))), -1 != a.indexOf("%") && (d = b * Number(a.substr(0, a.length - 1)) / 100));
    return d
};
AmCharts.fitToBounds = function (a, b, c) {
    a < b && (a = b);
    a > c && (a = c);
    return a
};
AmCharts.isDefined = function (a) {
    return void 0 === a ? !1 : !0
};
AmCharts.stripNumbers = function (a) {
    return a.replace(/[0-9]+/g, "")
};
AmCharts.extractPeriod = function (a) {
    var b = AmCharts.stripNumbers(a),
        c = 1;
    b != a && (c = Number(a.slice(0, a.indexOf(b))));
    return {
            period: b,
            count: c
        }
};
AmCharts.resetDateToMin = function (a, b, c, d) {
    void 0 === d && (d = 1);
    var e, f, g, h, k, l, m;
    AmCharts.useUTC ? (e = a.getUTCFullYear(), f = a.getUTCMonth(), g = a.getUTCDate(), h = a.getUTCHours(), k = a.getUTCMinutes(), l = a.getUTCSeconds(), m = a.getUTCMilliseconds(), a = a.getUTCDay()) : (e = a.getFullYear(), f = a.getMonth(), g = a.getDate(), h = a.getHours(), k = a.getMinutes(), l = a.getSeconds(), m = a.getMilliseconds(), a = a.getDay());
    switch (b) {
    case "YYYY":
        e = Math.floor(e / c) * c;
        f = 0;
        g = 1;
        m = l = k = h = 0;
        break;
    case "MM":
        f = Math.floor(f / c) * c;
        g = 1;
        m = l = k = h = 0;
        break;
    case "WW":
        0 === a && 0 < d && (a = 7);
        g = g - a + d;
        m = l = k = h = 0;
        break;
    case "DD":
        m = l = k = h = 0;
        break;
    case "hh":
        h = Math.floor(h / c) * c;
        m = l = k = 0;
        break;
    case "mm":
        k = Math.floor(k / c) * c;
        m = l = 0;
        break;
    case "ss":
        l = Math.floor(l / c) * c;
        m = 0;
        break;
    case "fff":
        m = Math.floor(m / c) * c
    }
    AmCharts.useUTC ? (a = new Date, a.setUTCFullYear(e), a.setUTCMonth(f), a.setUTCDate(g), a.setUTCHours(h), a.setUTCMinutes(k), a.setUTCSeconds(l), a.setUTCMilliseconds(m)) : a = new Date(e, f, g, h, k, l, m);
    return a
};
AmCharts.getPeriodDuration = function (a, b) {
    void 0 === b && (b = 1);
    var c;
    switch (a) {
    case "YYYY":
        c = 316224E5;
        break;
    case "MM":
        c = 26784E5;
        break;
    case "WW":
        c = 6048E5;
        break;
    case "DD":
        c = 864E5;
        break;
    case "hh":
        c = 36E5;
        break;
    case "mm":
        c = 6E4;
        break;
    case "ss":
        c = 1E3;
        break;
    case "fff":
        c = 1
    }
    return c * b
};
AmCharts.roundTo = function (a, b) {
    if (0 > b) return a;
    var c = Math.pow(10, b);
    return Math.round(a * c) / c
};
AmCharts.toFixed = function (a, b) {
    var c = String(Math.round(a * Math.pow(10, b)));
    if (0 < b) {
        var d = c.length;
        if (d < b) {
            var e;
            for (e = 0; e < b - d; e++) c = "0" + c
        }
        d = c.substring(0, c.length - b);
        "" === d && (d = 0);
        return d + "." + c.substring(c.length - b, c.length)
    }
    return String(c)
};
AmCharts.intervals = {
    s: {
        nextInterval: "ss",
        contains: 1E3
    },
    ss: {
        nextInterval: "mm",
        contains: 60,
        count: 0
    },
    mm: {
        nextInterval: "hh",
        contains: 60,
        count: 1
    },
    hh: {
        nextInterval: "DD",
        contains: 24,
        count: 2
    },
    DD: {
        nextInterval: "",
        contains: Infinity,
        count: 3
    }
};
AmCharts.getMaxInterval = function (a, b) {
    var c = AmCharts.intervals;
    return a >= c[b].contains ? (a = Math.round(a / c[b].contains), b = c[b].nextInterval, AmCharts.getMaxInterval(a, b)) : "ss" == b ? c[b].nextInterval : b
};
AmCharts.formatDuration = function (a, b, c, d, e, f) {
    var g = AmCharts.intervals,
        h = f.decimalSeparator;
    if (a >= g[b].contains) {
            var k = a - Math.floor(a / g[b].contains) * g[b].contains;
            "ss" == b && (k = AmCharts.formatNumber(k, f), 1 == k.split(h)[0].length && (k = "0" + k));
            ("mm" == b || "hh" == b) && 10 > k && (k = "0" + k);
            c = k + "" + d[b] + "" + c;
            a = Math.floor(a / g[b].contains);
            b = g[b].nextInterval;
            return AmCharts.formatDuration(a, b, c, d, e, f)
        }
    "ss" == b && (a = AmCharts.formatNumber(a, f), 1 == a.split(h)[0].length && (a = "0" + a));
        ("mm" == b || "hh" == b) && 10 > a && (a = "0" + a);
    c = a + "" + d[b] + "" + c;
    if (g[e].count > g[b].count) for (a = g[b].count; a < g[e].count; a++) b = g[b].nextInterval,
    "ss" == b || "mm" == b || "hh" == b ? c = "00" + d[b] + "" + c : "DD" == b && (c = "0" + d[b] + "" + c);
    ":" == c.charAt(c.length - 1) && (c = c.substring(0, c.length - 1));
    return c
};
AmCharts.formatNumber = function (a, b, c, d, e) {
    a = AmCharts.roundTo(a, b.precision);
    isNaN(c) && (c = b.precision);
    var f = b.decimalSeparator;
    b = b.thousandsSeparator;
    var g;
    g = 0 > a ? "-" : "";
    a = Math.abs(a);
    var h = String(a),
        k = !1; - 1 != h.indexOf("e") && (k = !0);
    0 <= c && !k && (h = AmCharts.toFixed(a, c));
    var l = "";
    if (k) l = h;
    else {
            var h = h.split("."),
                k = String(h[0]),
                m;
            for (m = k.length; 0 <= m; m -= 3) l = m != k.length ? 0 !== m ? k.substring(m - 3, m) + b + l : k.substring(m - 3, m) + l : k.substring(m - 3, m);
            void 0 !== h[1] && (l = l + f + h[1]);
            void 0 !== c && (0 < c && "0" != l) && (l = AmCharts.addZeroes(l, f, c))
        }
    l = g + l;
    "" === g && (!0 === d && 0 !== a) && (l = "+" + l);
    !0 === e && (l += "%");
    return l
};
AmCharts.addZeroes = function (a, b, c) {
    a = a.split(b);
    void 0 === a[1] && 0 < c && (a[1] = "0");
    return a[1].length < c ? (a[1] += "0", AmCharts.addZeroes(a[0] + b + a[1], b, c)) : void 0 !== a[1] ? a[0] + b + a[1] : a[0]
};
AmCharts.scientificToNormal = function (a) {
    var b;
    a = String(a).split("e");
    var c;
    if ("-" == a[1].substr(0, 1)) {
        b = "0.";
        for (c = 0; c < Math.abs(Number(a[1])) - 1; c++) b += "0";
        b += a[0].split(".").join("")
    } else {
        var d = 0;
        b = a[0].split(".");
        b[1] && (d = b[1].length);
        b = a[0].split(".").join("");
        for (c = 0; c < Math.abs(Number(a[1])) - d; c++) b += "0"
    }
    return b
};
AmCharts.toScientific = function (a, b) {
    if (0 === a) return "0";
    var c = Math.floor(Math.log(Math.abs(a)) * Math.LOG10E);
    Math.pow(10, c);
    mantissa = String(mantissa).split(".").join(b);
    return String(mantissa) + "e" + c
};
AmCharts.randomColor = function () {
    return "#" + ("00000" + (16777216 * Math.random() << 0).toString(16)).substr(-6)
};
AmCharts.hitTest = function (a, b, c) {
    var d = !1,
        e = a.x,
        f = a.x + a.width,
        g = a.y,
        h = a.y + a.height,
        k = AmCharts.isInRectangle;
    d || (d = k(e, g, b));
    d || (d = k(e, h, b));
    d || (d = k(f, g, b));
    d || (d = k(f, h, b));
    d || !0 === c || (d = AmCharts.hitTest(b, a, !0));
    return d
};
AmCharts.isInRectangle = function (a, b, c) {
    return a >= c.x - 5 && a <= c.x + c.width + 5 && b >= c.y - 5 && b <= c.y + c.height + 5 ? !0 : !1
};
AmCharts.isPercents = function (a) {
    if (-1 != String(a).indexOf("%")) return !0
};
AmCharts.dayNames = "Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" ");
AmCharts.shortDayNames = "Sun Mon Tue Wed Thu Fri Sat".split(" ");
AmCharts.monthNames = "January February March April May June July August September October November December".split(" ");
AmCharts.shortMonthNames = "Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" ");
AmCharts.getWeekNumber = function (a) {
    a = new Date(a);
    a.setHours(0, 0, 0);
    a.setDate(a.getDate() + 4 - (a.getDay() || 7));
    var b = new Date(a.getFullYear(), 0, 1);
    return Math.ceil(((a - b) / 864E5 + 1) / 7)
};
AmCharts.formatDate = function (a, b) {
    var c, d, e, f, g, h, k, l, m = AmCharts.getWeekNumber(a);
    AmCharts.useUTC ? (c = a.getUTCFullYear(), d = a.getUTCMonth(), e = a.getUTCDate(), f = a.getUTCDay(), g = a.getUTCHours(), h = a.getUTCMinutes(), k = a.getUTCSeconds(), l = a.getUTCMilliseconds()) : (c = a.getFullYear(), d = a.getMonth(), e = a.getDate(), f = a.getDay(), g = a.getHours(), h = a.getMinutes(), k = a.getSeconds(), l = a.getMilliseconds());
    var n = String(c).substr(2, 2),
        r = d + 1;
    9 > d && (r = "0" + r);
    var p = e;
    10 > e && (p = "0" + e);
    var s = "0" + f;
    b = b.replace(/W/g, m);
    m = g;
    24 == m && (m = 0);
    var q = m;
    10 > q && (q = "0" + q);
    b = b.replace(/JJ/g, q);
    b = b.replace(/J/g, m);
    m = g;
    0 === m && (m = 24);
    q = m;
    10 > q && (q = "0" + q);
    b = b.replace(/HH/g, q);
    b = b.replace(/H/g, m);
    m = g;
    11 < m && (m -= 12);
    q = m;
    10 > q && (q = "0" + q);
    b = b.replace(/KK/g, q);
    b = b.replace(/K/g, m);
    m = g;
    0 === m && (m = 12);
    12 < m && (m -= 12);
    q = m;
    10 > q && (q = "0" + q);
    b = b.replace(/LL/g, q);
    b = b.replace(/L/g, m);
    m = h;
    10 > m && (m = "0" + m);
    b = b.replace(/NN/g, m);
    b = b.replace(/N/g, h);
    h = k;
    10 > h && (h = "0" + h);
    b = b.replace(/SS/g, h);
    b = b.replace(/S/g, k);
    k = l;
    10 > k && (k = "00" + k);
    100 > k && (k = "0" + k);
    h = l;
    10 > h && (h = "00" + h);
    b = b.replace(/QQQ/g, k);
    b = b.replace(/QQ/g, h);
    b = b.replace(/Q/g, l);
    b = 12 > g ? b.replace(/A/g, "am") : b.replace(/A/g, "pm");
    b = b.replace(/YYYY/g, "@IIII@");
    b = b.replace(/YY/g, "@II@");
    b = b.replace(/MMMM/g, "@XXXX@");
    b = b.replace(/MMM/g, "@XXX@");
    b = b.replace(/MM/g, "@XX@");
    b = b.replace(/M/g, "@X@");
    b = b.replace(/DD/g, "@RR@");
    b = b.replace(/D/g, "@R@");
    b = b.replace(/EEEE/g, "@PPPP@");
    b = b.replace(/EEE/g, "@PPP@");
    b = b.replace(/EE/g, "@PP@");
    b = b.replace(/E/g, "@P@");
    b = b.replace(/@IIII@/g, c);
    b = b.replace(/@II@/g, n);
    b = b.replace(/@XXXX@/g, AmCharts.monthNames[d]);
    b = b.replace(/@XXX@/g, AmCharts.shortMonthNames[d]);
    b = b.replace(/@XX@/g, r);
    b = b.replace(/@X@/g, d + 1);
    b = b.replace(/@RR@/g, p);
    b = b.replace(/@R@/g, e);
    b = b.replace(/@PPPP@/g, AmCharts.dayNames[f]);
    b = b.replace(/@PPP@/g, AmCharts.shortDayNames[f]);
    b = b.replace(/@PP@/g, s);
    return b = b.replace(/@P@/g, f)
};
AmCharts.findPosX = function (a) {
    var b = a,
        c = a.offsetLeft;
    if (a.offsetParent) {
            for (; a = a.offsetParent;) c += a.offsetLeft;
            for (;
            (b = b.parentNode) && b != document.body;) c -= b.scrollLeft || 0
        }
    return c
};
AmCharts.findPosY = function (a) {
    var b = a,
        c = a.offsetTop;
    if (a.offsetParent) {
            for (; a = a.offsetParent;) c += a.offsetTop;
            for (;
            (b = b.parentNode) && b != document.body;) c -= b.scrollTop || 0
        }
    return c
};
AmCharts.findIfFixed = function (a) {
    if (a.offsetParent) for (; a = a.offsetParent;) if ("fixed" == AmCharts.getStyle(a, "position")) return !0;
    return !1
};
AmCharts.findIfAuto = function (a) {
    return a.style && "auto" == AmCharts.getStyle(a, "overflow") ? !0 : a.parentNode ? AmCharts.findIfAuto(a.parentNode) : !1
};
AmCharts.findScrollLeft = function (a, b) {
    a.scrollLeft && (b += a.scrollLeft);
    return a.parentNode ? AmCharts.findScrollLeft(a.parentNode, b) : b
};
AmCharts.findScrollTop = function (a, b) {
    a.scrollTop && (b += a.scrollTop);
    return a.parentNode ? AmCharts.findScrollTop(a.parentNode, b) : b
};
AmCharts.formatValue = function (a, b, c, d, e, f, g, h) {
    if (b) {
        void 0 === e && (e = "");
        var k;
        for (k = 0; k < c.length; k++) {
            var l = c[k],
                m = b[l];
            void 0 !== m && (m = f ? AmCharts.addPrefix(m, h, g, d) : AmCharts.formatNumber(m, d), a = a.replace(RegExp("\\[\\[" + e + "" + l + "\\]\\]", "g"), m))
        }
    }
    return a
};
AmCharts.formatDataContextValue = function (a, b) {
    if (a) {
        var c = a.match(/\[\[.*?\]\]/g),
            d;
        for (d = 0; d < c.length; d++) {
                var e = c[d],
                    e = e.substr(2, e.length - 4);
                void 0 !== b[e] && (a = a.replace(RegExp("\\[\\[" + e + "\\]\\]", "g"), b[e]))
            }
    }
    return a
};
AmCharts.massReplace = function (a, b) {
    for (var c in b) if (b.hasOwnProperty(c)) {
        var d = b[c];
        void 0 === d && (d = "");
        a = a.replace(c, d)
    }
    return a
};
AmCharts.cleanFromEmpty = function (a) {
    return a.replace(/\[\[[^\]]*\]\]/g, "")
};
AmCharts.addPrefix = function (a, b, c, d, e) {
    var f = AmCharts.formatNumber(a, d),
        g = "",
        h, k, l;
    if (0 === a) return "0";
    0 > a && (g = "-");
    a = Math.abs(a);
    if (1 < a) for (h = b.length - 1; - 1 < h; h--) {
            if (a >= b[h].number && (k = a / b[h].number, l = Number(d.precision), 1 > l && (l = 1), c = AmCharts.roundTo(k, l), !e || k == c)) {
                f = g + "" + c + "" + b[h].prefix;
                break
            }
        } else for (h = 0; h < c.length; h++) if (a <= c[h].number) {
            k = a / c[h].number;
            l = Math.abs(Math.round(Math.log(k) * Math.LOG10E));
            k = AmCharts.roundTo(k, l);
            f = g + "" + k + "" + c[h].prefix;
            break
        }
    return f
};
AmCharts.remove = function (a) {
    a && a.remove()
};
AmCharts.copyProperties = function (a, b) {
    for (var c in a) a.hasOwnProperty(c) && "events" != c && (void 0 !== a[c] && "function" != typeof a[c]) && (b[c] = a[c])
};
AmCharts.recommended = function () {
    var a = "js";
    document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure", "1.1") || swfobject && swfobject.hasFlashPlayerVersion("8") && (a = "flash");
    return a
};
AmCharts.getEffect = function (a) {
    ">" == a && (a = "easeOutSine");
    "<" == a && (a = "easeInSine");
    "elastic" == a && (a = "easeOutElastic");
    return a
};
AmCharts.extend = function (a, b) {
    for (var c in b) void 0 !== b[c] && (a.hasOwnProperty(c) || (a[c] = b[c]))
};
AmCharts.fixNewLines = function (a) {
    if (9 > AmCharts.IEversion && 0 < AmCharts.IEversion) {
        var b = RegExp("\\n", "g");
        a && (a = a.replace(b, "<br />"))
    }
    return a
};
AmCharts.deleteObject = function (a, b) {
    if (a) {
        if (void 0 === b || null === b) b = 20;
        if (0 != b) if ("[object Array]" === Object.prototype.toString.call(a)) for (var c = 0; c < a.length; c++) AmCharts.deleteObject(a[c], b - 1),
        a[c] = null;
        else try {
            for (c in a) a[c] && ("object" == typeof a[c] && AmCharts.deleteObject(a[c], b - 1), "function" != typeof a[c] && (a[c] = null))
        } catch (d) {}
    }
};
AmCharts.changeDate = function (a, b, c, d, e) {
    var f = -1;
    void 0 === d && (d = !0);
    void 0 === e && (e = !1);
    !0 === d && (f = 1);
    switch (b) {
    case "YYYY":
        a.setFullYear(a.getFullYear() + c * f);
        d || e || a.setDate(a.getDate() + 1);
        break;
    case "MM":
        a.setMonth(a.getMonth() + c * f);
        d || e || a.setDate(a.getDate() + 1);
        break;
    case "DD":
        a.setDate(a.getDate() + c * f);
        break;
    case "WW":
        a.setDate(a.getDate() + 7 * c * f + 1);
        break;
    case "hh":
        a.setHours(a.getHours() + c * f);
        break;
    case "mm":
        a.setMinutes(a.getMinutes() + c * f);
        break;
    case "ss":
        a.setSeconds(a.getSeconds() + c * f);
        break;
    case "fff":
        a.setMilliseconds(a.getMilliseconds() + c * f)
    }
    return a
};
AmCharts.Bezier = AmCharts.Class({
    construct: function (a, b, c, d, e, f, g, h, k, l) {
        "object" == typeof g && (g = g[0]);
        "object" == typeof h && (h = h[0]);
        f = {
            fill: g,
            "fill-opacity": h,
            "stroke-width": f
        };
        void 0 !== k && 0 < k && (f["stroke-dasharray"] = k);
        isNaN(e) || (f["stroke-opacity"] = e);
        d && (f.stroke = d);
        d = "M" + Math.round(b[0]) + "," + Math.round(c[0]);
        e = [];
        for (k = 0; k < b.length; k++) e.push({
            x: Number(b[k]),
            y: Number(c[k])
        });
        1 < e.length && (b = this.interpolate(e), d += this.drawBeziers(b));
        l ? d += l : AmCharts.VML || (d += "M0,0 L0,0");
        this.path = a.path(d).attr(f)
    },
    interpolate: function (a) {
        var b = [];
        b.push({
            x: a[0].x,
            y: a[0].y
        });
        var c = a[1].x - a[0].x,
            d = a[1].y - a[0].y,
            e = AmCharts.bezierX,
            f = AmCharts.bezierY;
        b.push({
                x: a[0].x + c / e,
                y: a[0].y + d / f
            });
        var g;
        for (g = 1; g < a.length - 1; g++) {
                var h = a[g - 1],
                    k = a[g],
                    d = a[g + 1],
                    c = d.x - k.x,
                    d = d.y - h.y,
                    h = k.x - h.x;
                h > c && (h = c);
                b.push({
                        x: k.x - h / e,
                        y: k.y - d / f
                    });
                b.push({
                        x: k.x,
                        y: k.y
                    });
                b.push({
                        x: k.x + h / e,
                        y: k.y + d / f
                    })
            }
        d = a[a.length - 1].y - a[a.length - 2].y;
        c = a[a.length - 1].x - a[a.length - 2].x;
        b.push({
                x: a[a.length - 1].x - c / e,
                y: a[a.length - 1].y - d / f
            });
        b.push({
                x: a[a.length - 1].x,
                y: a[a.length - 1].y
            });
        return b
    },
    drawBeziers: function (a) {
        var b = "",
            c;
        for (c = 0; c < (a.length - 1) / 3; c++) b += this.drawBezierMidpoint(a[3 * c], a[3 * c + 1], a[3 * c + 2], a[3 * c + 3]);
        return b
    },
    drawBezierMidpoint: function (a, b, c, d) {
        var e = Math.round,
            f = this.getPointOnSegment(a, b, 0.75),
            g = this.getPointOnSegment(d, c, 0.75),
            h = (d.x - a.x) / 16,
            k = (d.y - a.y) / 16,
            l = this.getPointOnSegment(a, b, 0.375);
        a = this.getPointOnSegment(f, g, 0.375);
        a.x -= h;
        a.y -= k;
        b = this.getPointOnSegment(g, f, 0.375);
        b.x += h;
        b.y += k;
        c = this.getPointOnSegment(d, c, 0.375);
        h = this.getMiddle(l, a);
        f = this.getMiddle(f, g);
        g = this.getMiddle(b, c);
        l = " Q" + e(l.x) + "," + e(l.y) + "," + e(h.x) + "," + e(h.y);
        l += " Q" + e(a.x) + "," + e(a.y) + "," + e(f.x) + "," + e(f.y);
        l += " Q" + e(b.x) + "," + e(b.y) + "," + e(g.x) + "," + e(g.y);
        return l += " Q" + e(c.x) + "," + e(c.y) + "," + e(d.x) + "," + e(d.y)
    },
    getMiddle: function (a, b) {
        return {
            x: (a.x + b.x) / 2,
            y: (a.y + b.y) / 2
        }
    },
    getPointOnSegment: function (a, b, c) {
        return {
            x: a.x + (b.x - a.x) * c,
            y: a.y + (b.y - a.y) * c
        }
    }
});
AmCharts.Cuboid = AmCharts.Class({
    construct: function (a, b, c, d, e, f, g, h, k, l, m, n, r) {
        this.set = a.set();
        this.container = a;
        this.h = Math.round(c);
        this.w = Math.round(b);
        this.dx = d;
        this.dy = e;
        this.colors = f;
        this.alpha = g;
        this.bwidth = h;
        this.bcolor = k;
        this.balpha = l;
        this.colors = f;
        r ? 0 > b && 0 === m && (m = 180) : 0 > c && 270 == m && (m = 90);
        this.gradientRotation = m;
        0 === d && 0 === e && (this.cornerRadius = n);
        this.draw()
    },
    draw: function () {
        var a = this.set;
        a.clear();
        var b = this.container,
            c = this.w,
            d = this.h,
            e = this.dx,
            f = this.dy,
            g = this.colors,
            h = this.alpha,
            k =
        this.bwidth,
            l = this.bcolor,
            m = this.balpha,
            n = this.gradientRotation,
            r = this.cornerRadius,
            p = g,
            s = g;
        "object" == typeof g && (p = g[0], s = g[g.length - 1]);
        var q, t, v, u, w, y, x, A, z;
        if (0 < e || 0 < f) x = s,
        s = AmCharts.adjustLuminosity(p, -0.2),
        s = AmCharts.adjustLuminosity(p, -0.2),
        q = AmCharts.polygon(b, [0, e, c + e, c, 0], [0, f, f, 0, 0], s, h, 0, 0, 0, n),
        0 < m && (z = AmCharts.line(b, [0, e, c + e], [0, f, f], l, m, k)),
        t = AmCharts.polygon(b, [0, 0, c, c, 0], [0, d, d, 0, 0], s, h, 0, 0, 0, 0, n),
        t.translate(e, f),
        0 < m && (v = AmCharts.line(b, [e, e], [f, f + d], l, 1, k)),
        u = AmCharts.polygon(b, [0, 0, e, e, 0], [0, d, d + f, f, 0], s, h, 0, 0, 0, n),
        w = AmCharts.polygon(b, [c, c, c + e, c + e, c], [0, d, d + f, f, 0], s, h, 0, 0, 0, n),
        0 < m && (y = AmCharts.line(b, [c, c + e, c + e, c], [0, f, d + f, d], l, m, k)),
        s = AmCharts.adjustLuminosity(x, 0.2),
        x = AmCharts.polygon(b, [0, e, c + e, c, 0], [d, d + f, d + f, d, d], s, h, 0, 0, 0, n),
        0 < m && (A = AmCharts.line(b, [0, e, c + e], [d, d + f, d + f], l, m, k));
        1 > Math.abs(d) && (d = 0);
        1 > Math.abs(c) && (c = 0);
        b = 0 === d ? AmCharts.line(b, [0, c], [0, 0], l, m, k) : 0 === c ? AmCharts.line(b, [0, 0], [0, d], l, m, k) : 0 < r ? AmCharts.rect(b, c, d, g, h, k, l, m, r, n) : AmCharts.polygon(b, [0, 0, c, c, 0], [0, d, d, 0, 0], g, h, k, l, m, n);
        d = 0 > d ? [q, z, t, v, u, w, y, x, A, b] : [x, A, t, v, u, w, q, z, y, b];
        for (q = 0; q < d.length; q++)(t = d[q]) && a.push(t)
    },
    width: function (a) {
        this.w = a;
        this.draw()
    },
    height: function (a) {
        this.h = a;
        this.draw()
    },
    animateHeight: function (a, b) {
        var c = this;
        c.easing = b;
        c.totalFrames = 1E3 * a / AmCharts.updateRate;
        c.rh = c.h;
        c.frame = 0;
        c.height(1);
        setTimeout(function () {
            c.updateHeight.call(c)
        }, AmCharts.updateRate)
    },
    updateHeight: function () {
        var a = this;
        a.frame++;
        var b = a.totalFrames;
        a.frame <= b && (b = a.easing(0, a.frame, 1, a.rh - 1, b), a.height(b), setTimeout(function () {
            a.updateHeight.call(a)
        }, AmCharts.updateRate))
    },
    animateWidth: function (a, b) {
        var c = this;
        c.easing = b;
        c.totalFrames = 1E3 * a / AmCharts.updateRate;
        c.rw = c.w;
        c.frame = 0;
        c.width(1);
        setTimeout(function () {
            c.updateWidth.call(c)
        }, AmCharts.updateRate)
    },
    updateWidth: function () {
        var a = this;
        a.frame++;
        var b = a.totalFrames;
        a.frame <= b && (b = a.easing(0, a.frame, 1, a.rw - 1, b), a.width(b), setTimeout(function () {
            a.updateWidth.call(a)
        }, AmCharts.updateRate))
    }
});
AmCharts.AmLegend = AmCharts.Class({
    construct: function () {
        this.createEvents("rollOverMarker", "rollOverItem", "rollOutMarker", "rollOutItem", "showItem", "hideItem", "clickMarker", "rollOverItem", "rollOutItem", "clickLabel");
        this.position = "bottom";
        this.borderColor = this.color = "#000000";
        this.borderAlpha = 0;
        this.markerLabelGap = 5;
        this.verticalGap = 10;
        this.align = "left";
        this.horizontalGap = 0;
        this.spacing = 10;
        this.markerDisabledColor = "#AAB3B3";
        this.markerType = "square";
        this.markerSize = 16;
        this.markerBorderThickness = 1;
        this.marginBottom =
        this.marginTop = 0;
        this.marginLeft = this.marginRight = 20;
        this.autoMargins = !0;
        this.valueWidth = 50;
        this.switchable = !0;
        this.switchType = "x";
        this.switchColor = "#FFFFFF";
        this.rollOverColor = "#CC0000";
        this.reversedOrder = !1;
        this.labelText = "[[title]]";
        this.valueText = "[[value]]";
        this.useMarkerColorForLabels = !1;
        this.rollOverGraphAlpha = 1;
        this.textClickEnabled = !1;
        this.equalWidths = !0;
        this.dateFormat = "DD-MM-YYYY";
        this.backgroundColor = "#FFFFFF";
        this.backgroundAlpha = 0;
        this.showEntries = !0
    },
    setData: function (a) {
        this.data = a;
        this.invalidateSize()
    },
    invalidateSize: function () {
        this.destroy();
        this.entries = [];
        this.valueLabels = [];
        AmCharts.ifArray(this.data) && this.drawLegend()
    },
    drawLegend: function () {
        var a = this.chart,
            b = this.position,
            c = this.width,
            d = a.divRealWidth,
            e = a.divRealHeight,
            f = this.div,
            g = this.data;
        isNaN(this.fontSize) && (this.fontSize = a.fontSize);
        if ("right" == b || "left" == b) this.maxColumns = 1,
        this.marginLeft = this.marginRight = 10;
        else if (this.autoMargins) {
                this.marginRight = a.marginRight;
                this.marginLeft = a.marginLeft;
                var h = a.autoMarginOffset;
                "bottom" == b ? (this.marginBottom = h, this.marginTop = 0) : (this.marginTop = h, this.marginBottom = 0)
            }
        c = void 0 !== c ? AmCharts.toCoordinate(c, d) : a.realWidth;
        "outside" == b ? (c = f.offsetWidth, e = f.offsetHeight, f.clientHeight && (c = f.clientWidth, e = f.clientHeight)) : (f.style.width = c + "px", f.className = "amChartsLegend");
        this.divWidth = c;
        this.container = new AmCharts.AmDraw(f, c, e);
        this.lx = 0;
        this.ly = 8;
        b = this.markerSize;
        b > this.fontSize && (this.ly = b / 2 - 1);
        0 < b && (this.lx += b + this.markerLabelGap);
        this.titleWidth = 0;
        if (b = this.title) a = AmCharts.text(this.container, b, this.color, a.fontFamily, this.fontSize, "start", !0),
        a.translate(this.marginLeft, this.marginTop + this.verticalGap + this.ly + 1),
        a = a.getBBox(),
        this.titleWidth = a.width + 15,
        this.titleHeight = a.height + 6;
        this.index = this.maxLabelWidth = 0;
        if (this.showEntries) {
                for (a = 0; a < g.length; a++) this.createEntry(g[a]);
                for (a = this.index = 0; a < g.length; a++) this.createValue(g[a])
            }
        this.arrangeEntries();
        this.updateValues()
    },
    arrangeEntries: function () {
        var a = this.position,
            b = this.marginLeft + this.titleWidth,
            c = this.marginRight,
            d = this.marginTop,
            e = this.marginBottom,
            f = this.horizontalGap,
            g = this.div,
            h = this.divWidth,
            k = this.maxColumns,
            l = this.verticalGap,
            m = this.spacing,
            n = h - c - b,
            r = 0,
            p = 0,
            s = this.container,
            q = s.set();
        this.set = q;
        s = s.set();
        q.push(s);
        var t = this.entries,
            v, u;
        for (u = 0; u < t.length; u++) {
                v = t[u].getBBox();
                var w = v.width;
                w > r && (r = w);
                v = v.height;
                v > p && (p = v)
            }
        var y = w = 0,
            x = f;
        for (u = 0; u < t.length; u++) {
                var A = t[u];
                this.reversedOrder && (A = t[t.length - u - 1]);
                v = A.getBBox();
                var z;
                this.equalWidths ? z = f + y * (r + m + this.markerLabelGap) : (z = x, x = x + v.width + f + m);
                z + v.width > n && (0 < u && 0 != y) && (w++, y = 0, z = f, x = z + v.width + f + m, skipNewRow = !0);
                A.translate(z, (p + l) * w);
                y++;
                !isNaN(k) && y >= k && (y = 0, w++);
                s.push(A)
            }
        v = s.getBBox();
        k = v.height + 2 * l - 1;
        "left" == a || "right" == a ? (h = v.width + 2 * f, g.style.width = h + b + c + "px") : h = h - b - c - 1;
        c = AmCharts.polygon(this.container, [0, h, h, 0], [0, 0, k, k], this.backgroundColor, this.backgroundAlpha, 1, this.borderColor, this.borderAlpha);
        q.push(c);
        q.translate(b, d);
        c.toBack();
        b = f;
        if ("top" == a || "bottom" == a || "absolute" == a || "outside" == a)"center" == this.align ? b = f + (h - v.width) / 2 : "right" == this.align && (b = f + h - v.width);
        s.translate(b, l + 1);
        this.titleHeight > k && (k = this.titleHeight);
        a = k + d + e + 1;
        0 > a && (a = 0);
        g.style.height = Math.round(a) + "px"
    },
    createEntry: function (a) {
        if (!1 !== a.visibleInLegend) {
            var b = this.chart,
                c = a.markerType;
            c || (c = this.markerType);
            var d = a.color,
                e = a.alpha;
            a.legendKeyColor && (d = a.legendKeyColor());
            a.legendKeyAlpha && (e = a.legendKeyAlpha());
            !0 === a.hidden && (d = this.markerDisabledColor);
            var f = this.createMarker(c, d, e);
            this.addListeners(f, a);
            e = this.container.set([f]);
            this.switchable && e.setAttr("cursor", "pointer");
            var g = this.switchType;
            if (g) {
                    var h;
                    h = "x" == g ? this.createX() : this.createV();
                    h.dItem = a;
                    !0 !== a.hidden ? "x" == g ? h.hide() : h.show() : "x" != g && h.hide();
                    this.switchable || h.hide();
                    this.addListeners(h, a);
                    a.legendSwitch = h;
                    e.push(h)
                }
            g = this.color;
            a.showBalloon && (this.textClickEnabled && void 0 !== this.selectedColor) && (g = this.selectedColor);
            this.useMarkerColorForLabels && (g = d);
            !0 === a.hidden && (g = this.markerDisabledColor);
            var d = AmCharts.massReplace(this.labelText, {
                    "[[title]]": a.title
                }),
                k = this.fontSize,
                l = this.markerSize;
            if (f && l <= k) {
                    var m = 0;
                    if ("bubble" == c || "circle" == c) m = l / 2;
                    c = m + this.ly - k / 2 + (k + 2 - l) / 2;
                    f.translate(m, c);
                    h && h.translate(m, c)
                }
            var n;
            d && (d = AmCharts.fixNewLines(d), n = AmCharts.text(this.container, d, g, b.fontFamily, k, "start"), n.translate(this.lx, this.ly), e.push(n), b = n.getBBox().width, this.maxLabelWidth < b && (this.maxLabelWidth = b));
            this.entries[this.index] = e;
            a.legendEntry = this.entries[this.index];
            a.legendLabel = n;
            this.index++
        }
    },
    addListeners: function (a, b) {
        var c = this;
        a && a.mouseover(function () {
            c.rollOverMarker(b)
        }).mouseout(function () {
            c.rollOutMarker(b)
        }).click(function () {
            c.clickMarker(b)
        })
    },
    rollOverMarker: function (a) {
        this.switchable && this.dispatch("rollOverMarker", a);
        this.dispatch("rollOverItem", a)
    },
    rollOutMarker: function (a) {
        this.switchable && this.dispatch("rollOutMarker", a);
        this.dispatch("rollOutItem", a)
    },
    clickMarker: function (a) {
        this.switchable ? !0 === a.hidden ? this.dispatch("showItem", a) : this.dispatch("hideItem", a) : this.textClickEnabled && this.dispatch("clickMarker", a)
    },
    rollOverLabel: function (a) {
        a.hidden || (this.textClickEnabled && a.legendLabel && a.legendLabel.attr({
            fill: this.rollOverColor
        }), this.dispatch("rollOverItem", a))
    },
    rollOutLabel: function (a) {
        if (!a.hidden) {
            if (this.textClickEnabled && a.legendLabel) {
                var b = this.color;
                void 0 !== this.selectedColor && a.showBalloon && (b = this.selectedColor);
                this.useMarkerColorForLabels && (b = a.lineColor, void 0 === b && (b = a.color));
                a.legendLabel.attr({
                    fill: b
                })
            }
            this.dispatch("rollOutItem", a)
        }
    },
    clickLabel: function (a) {
        this.textClickEnabled ? a.hidden || this.dispatch("clickLabel", a) : this.switchable && (!0 === a.hidden ? this.dispatch("showItem", a) : this.dispatch("hideItem", a))
    },
    dispatch: function (a, b) {
        this.fire(a, {
            type: a,
            dataItem: b,
            target: this,
            chart: this.chart
        })
    },
    createValue: function (a) {
        var b = this,
            c = b.fontSize;
        if (!1 !== a.visibleInLegend) {
                var d = b.maxLabelWidth;
                b.equalWidths || (b.valueAlign = "left");
                "left" == b.valueAlign && (d = a.legendEntry.getBBox().width);
                var e = d;
                if (b.valueText) {
                    var f = b.color;
                    b.useMarkerColorForValues && (f = a.color, a.legendKeyColor && (f = a.legendKeyColor()));
                    !0 === a.hidden && (f = b.markerDisabledColor);
                    var g = b.valueText,
                        d = d + b.lx + b.markerLabelGap + b.valueWidth,
                        h = "end";
                    "left" == b.valueAlign && (d -= b.valueWidth, h = "start");
                    f = AmCharts.text(b.container, g, f, b.chart.fontFamily, c, h);
                    f.translate(d, b.ly);
                    b.entries[b.index].push(f);
                    e += b.valueWidth + 2 * b.markerLabelGap;
                    f.dItem = a;
                    b.valueLabels.push(f)
                }
                b.index++;
                f = b.markerSize;
                f < c + 7 && (f = c + 7, AmCharts.VML && (f += 3));
                c = b.container.rect(b.markerSize, 0, e, f, 0, 0).attr({
                    stroke: "none",
                    fill: "#ffffff",
                    "fill-opacity": 0.005
                });
                c.dItem = a;
                b.entries[b.index - 1].push(c);
                c.mouseover(function () {
                    b.rollOverLabel(a)
                }).mouseout(function () {
                    b.rollOutLabel(a)
                }).click(function () {
                    b.clickLabel(a)
                })
            }
    },
    createV: function () {
        var a = this.markerSize;
        return AmCharts.polygon(this.container, [a / 5, a / 2, a - a / 5, a / 2], [a / 3, a - a / 5, a / 5, a / 1.7], this.switchColor)
    },
    createX: function () {
        var a = this.markerSize - 3,
            b = {
                stroke: this.switchColor,
                "stroke-width": 3
            },
            c = this.container,
            d = AmCharts.line(c, [3, a], [3, a]).attr(b),
            a = AmCharts.line(c, [3, a], [a, 3]).attr(b);
        return this.container.set([d, a])
    },
    createMarker: function (a, b, c) {
        var d = this.markerSize,
            e = this.container,
            f, g = this.markerBorderColor;
        g || (g = b);
        var h = this.markerBorderThickness,
            k = this.markerBorderAlpha;
        switch (a) {
            case "square":
                f = AmCharts.polygon(e, [0, d, d, 0], [0, 0, d, d], b, c, h, g, k);
                break;
            case "circle":
                f = AmCharts.circle(e, d / 2, b, c, h, g, k);
                f.translate(d / 2, d / 2);
                break;
            case "line":
                f = AmCharts.line(e, [0, d], [d / 2, d / 2], b, c, h);
                break;
            case "dashedLine":
                f = AmCharts.line(e, [0, d], [d / 2, d / 2], b, c, h, 3);
                break;
            case "triangleUp":
                f = AmCharts.polygon(e, [0, d / 2, d, d], [d, 0, d, d], b, c, h, g, k);
                break;
            case "triangleDown":
                f = AmCharts.polygon(e, [0, d / 2, d, d], [0, d, 0, 0], b, c, h, g, k);
                break;
            case "bubble":
                f = AmCharts.circle(e, d / 2, b, c, h, g, k, !0),
                f.translate(d / 2, d / 2)
            }
        return f
    },
    validateNow: function () {
        this.invalidateSize()
    },
    updateValues: function () {
        var a = this.valueLabels,
            b = this.chart,
            c;
        for (c = 0; c < a.length; c++) {
                var d = a[c],
                    e = d.dItem;
                if (void 0 !== e.type) {
                        var f = e.currentDataItem;
                        if (f) {
                            var g = this.valueText;
                            e.legendValueText && (g = e.legendValueText);
                            e = g;
                            e = b.formatString(e, f);
                            d.text(e)
                        } else d.text(" ")
                    } else f = b.formatString(this.valueText, e),
                d.text(f)
            }
    },
    renderFix: function () {
        if (!AmCharts.VML) {
            var a = this.container;
            a && a.renderFix()
        }
    },
    destroy: function () {
        this.div.innerHTML = "";
        AmCharts.remove(this.set)
    }
});
AmCharts.AmBalloon = AmCharts.Class({
    construct: function () {
        this.enabled = !0;
        this.fillColor = "#CC0000";
        this.fillAlpha = 1;
        this.borderThickness = 2;
        this.borderColor = "#FFFFFF";
        this.borderAlpha = 1;
        this.cornerRadius = 6;
        this.maximumWidth = 220;
        this.horizontalPadding = 8;
        this.verticalPadding = 5;
        this.pointerWidth = 10;
        this.pointerOrientation = "V";
        this.color = "#FFFFFF";
        this.textShadowColor = "#000000";
        this.adjustBorderColor = !1;
        this.showBullet = !0;
        this.show = this.follow = !1;
        this.bulletSize = 3;
        this.textAlign = "middle"
    },
    draw: function () {
        var a =
        this.pointToX,
            b = this.pointToY,
            c = this.textAlign;
        if (!isNaN(a)) {
                var d = this.chart,
                    e = d.container,
                    f = this.set;
                AmCharts.remove(f);
                AmCharts.remove(this.pointer);
                this.set = f = e.set();
                d.balloonsSet.push(f);
                if (this.show) {
                        var g = this.l,
                            h = this.t,
                            k = this.r,
                            l = this.b,
                            m = this.textShadowColor;
                        this.color == m && (m = void 0);
                        var n = this.balloonColor,
                            r = this.fillColor,
                            p = this.borderColor;
                        void 0 != n && (this.adjustBorderColor ? p = n : r = n);
                        var s = this.horizontalPadding,
                            n = this.verticalPadding,
                            q = this.pointerWidth,
                            t = this.pointerOrientation,
                            v = this.cornerRadius,
                            u = d.fontFamily,
                            w = this.fontSize;
                        void 0 == w && (w = d.fontSize);
                        d = AmCharts.text(e, this.text, this.color, u, w, c);
                        f.push(d);
                        var y;
                        void 0 != m && (y = AmCharts.text(e, this.text, m, u, w, c, !1, 0.4), f.push(y));
                        u = d.getBBox();
                        m = u.height + 2 * n;
                        u = u.width + 2 * s;
                        window.opera && (m += 2);
                        var x, w = w / 2 + n;
                        switch (c) {
                            case "middle":
                                x = u / 2;
                                break;
                            case "left":
                                x = s;
                                break;
                            case "right":
                                x = u - s
                            }
                        d.translate(x, w);
                        y && y.translate(x + 1, w + 1);
                        "H" != t ? (x = a - u / 2, c = b < h + m + 10 && "down" != t ? b + q : b - m - q) : (2 * q > m && (q = m / 2), c = b - m / 2, x = a < g + (k - g) / 2 ? a + q : a - u - q);
                        c + m >= l && (c = l - m);
                        c < h && (c = h);
                        x < g && (x = g);
                        x + u > k && (x = k - u);
                        0 < v || 0 === q ? (p = AmCharts.rect(e, u, m, r, this.fillAlpha, this.borderThickness, p, this.borderAlpha, this.cornerRadius), this.showBullet && (e = AmCharts.circle(e, this.bulletSize, r, this.fillAlpha), e.translate(a, b), this.pointer = e)) : (l = [], v = [], "H" != t ? (g = a - x, g > u - q && (g = u - q), g < q && (g = q), l = [0, g - q, a - x, g + q, u, u, 0, 0], v = b < h + m + 10 && "down" != t ? [0, 0, b - c, 0, 0, m, m, 0] : [m, m, b - c, m, m, 0, 0, m]) : (h = b - c, h > m - q && (h = m - q), h < q && (h = q), v = [0, h - q, b - c, h + q, m, m, 0, 0], l = a < g + (k - g) / 2 ? [0, 0, x < a ? 0 : a - x, 0, 0, u, u, 0] : [u, u, x + u > a ? u : a - x, u, u, 0, 0, u]), p = AmCharts.polygon(e, l, v, r, this.fillAlpha, this.borderThickness, p, this.borderAlpha));
                        f.push(p);
                        p.toFront();
                        y && y.toFront();
                        d.toFront();
                        a = 1;
                        9 > AmCharts.IEversion && this.follow && (a = 6);
                        f.translate(x - a, c);
                        f = d.getBBox();
                        this.bottom = c + f.y + f.height + 2 * n + 2;
                        this.yPos = f.y + c
                    }
            }
    },
    followMouse: function () {
        if (this.follow && this.show) {
            var a = this.chart.mouseX,
                b = this.chart.mouseY - 3;
            this.pointToX = a;
            this.pointToY = b;
            if (a != this.previousX || b != this.previousY) if (this.previousX = a, this.previousY = b, 0 === this.cornerRadius) this.draw();
            else {
                    var c = this.set;
                    if (c) {
                        var d = c.getBBox(),
                            a = a - d.width / 2,
                            e = b - d.height - 10;
                        a < this.l && (a = this.l);
                        a > this.r - d.width && (a = this.r - d.width);
                        e < this.t && (e = b + 10);
                        c.translate(a, e)
                    }
                }
        }
    },
    changeColor: function (a) {
        this.balloonColor = a
    },
    setBounds: function (a, b, c, d) {
        this.l = a;
        this.t = b;
        this.r = c;
        this.b = d
    },
    showBalloon: function (a) {
        this.text = a;
        this.show = !0;
        this.draw()
    },
    hide: function () {
        this.follow = this.show = !1;
        this.destroy()
    },
    setPosition: function (a, b, c) {
        this.pointToX = a;
        this.pointToY = b;
        c && (a == this.previousX && b == this.previousY || this.draw());
        this.previousX = a;
        this.previousY = b
    },
    followCursor: function (a) {
        var b = this;
        (b.follow = a) ? (b.pShowBullet = b.showBullet, b.showBullet = !1) : void 0 !== b.pShowBullet && (b.showBullet = b.pShowBullet);
        clearInterval(b.interval);
        var c = b.chart.mouseX,
            d = b.chart.mouseY;
        !isNaN(c) && a && (b.pointToX = c, b.pointToY = d - 3, b.interval = setInterval(function () {
                b.followMouse.call(b)
            }, 40))
    },
    destroy: function () {
        clearInterval(this.interval);
        AmCharts.remove(this.set);
        this.set = null;
        AmCharts.remove(this.pointer);
        this.pointer = null
    }
});
AmCharts.AmCoordinateChart = AmCharts.Class({
    inherits: AmCharts.AmChart,
    construct: function () {
        AmCharts.AmCoordinateChart.base.construct.call(this);
        this.createEvents("rollOverGraphItem", "rollOutGraphItem", "clickGraphItem", "doubleClickGraphItem", "rightClickGraphItem", "clickGraph");
        this.plotAreaFillColors = "#FFFFFF";
        this.plotAreaFillAlphas = 0;
        this.plotAreaBorderColor = "#000000";
        this.plotAreaBorderAlpha = 0;
        this.startAlpha = 1;
        this.startDuration = 0;
        this.startEffect = "elastic";
        this.sequencedAnimation = !0;
        this.colors = "#FF6600 #FCD202 #B0DE09 #0D8ECF #2A0CD0 #CD0D74 #CC0000 #00CC00 #0000CC #DDDDDD #999999 #333333 #990000".split(" ");
        this.balloonDateFormat = "MMM DD, YYYY";
        this.valueAxes = [];
        this.graphs = []
    },
    initChart: function () {
        AmCharts.AmCoordinateChart.base.initChart.call(this);
        this.createValueAxes();
        AmCharts.VML && (this.startAlpha = 1);
        var a = this.legend;
        a && a.setData(this.graphs)
    },
    createValueAxes: function () {
        if (0 === this.valueAxes.length) {
            var a = new AmCharts.ValueAxis;
            this.addValueAxis(a)
        }
    },
    parseData: function () {
        this.processValueAxes();
        this.processGraphs()
    },
    parseSerialData: function () {
        AmCharts.AmSerialChart.base.parseData.call(this);
        var a = this.graphs,
            b, c = {},
            d = this.seriesIdField;
        d || (d = this.categoryField);
        this.chartData = [];
        var e = this.dataProvider;
        if (e) {
                var f = !1,
                    g, h = this.categoryAxis;
                if (h) {
                        var f = h.parseDates,
                            k = h.forceShowField;
                        g = h.categoryFunction
                    }
                var l, m;
                f && (b = AmCharts.extractPeriod(h.minPeriod), l = b.period, m = b.count);
                var n = {};
                this.lookupTable = n;
                var r;
                for (r = 0; r < e.length; r++) {
                        var p = {},
                            s = e[r];
                        b = s[this.categoryField];
                        p.category = g ? g(b, s, h) : String(b);
                        k && (p.forceShow = s[k]);
                        n[s[d]] = p;
                        f && (b = h.categoryFunction ? h.categoryFunction(b, s, h) : b instanceof Date ? "fff" == h.minPeriod ? AmCharts.useUTC ? new Date(b.getUTCFullYear(), b.getUTCMonth(), b.getUTCDate(), b.getUTCHours(), b.getUTCMinutes(), b.getUTCSeconds(), b.getUTCMilliseconds()) : new Date(b.getFullYear(), b.getMonth(), b.getDate(), b.getHours(), b.getMinutes(), b.getSeconds(), b.getMilliseconds()) : new Date(b) : new Date(b), b = AmCharts.resetDateToMin(b, l, m), p.category = b, p.time = b.getTime());
                        var q = this.valueAxes;
                        p.axes = {};
                        p.x = {};
                        var t;
                        for (t = 0; t < q.length; t++) {
                                var v = q[t].id;
                                p.axes[v] = {};
                                p.axes[v].graphs = {};
                                var u;
                                for (u = 0; u < a.length; u++) {
                                    b = a[u];
                                    var w = b.id,
                                        y = b.periodValue;
                                    if (b.valueAxis.id == v) {
                                            p.axes[v].graphs[w] = {};
                                            var x = {};
                                            x.index = r;
                                            b.dataProvider && (s = c);
                                            x.values = this.processValues(s, b, y);
                                            this.processFields(b, x, s);
                                            x.category = p.category;
                                            x.serialDataItem = p;
                                            x.graph = b;
                                            p.axes[v].graphs[w] = x
                                        }
                                }
                            }
                        this.chartData[r] = p
                    }
            }
        for (c = 0; c < a.length; c++) b = a[c],
        b.dataProvider && this.parseGraphData(b)
    },
    processValues: function (a, b, c) {
        var d = {},
            e, f = !1;
        "candlestick" != b.type && "ohlc" != b.type || "" === c || (f = !0);
        e = Number(a[b.valueField + c]);
        isNaN(e) || (d.value = e);
        f && (c = "Open");
        e = Number(a[b.openField + c]);
        isNaN(e) || (d.open = e);
        f && (c = "Close");
        e = Number(a[b.closeField + c]);
        isNaN(e) || (d.close = e);
        f && (c = "Low");
        e = Number(a[b.lowField + c]);
        isNaN(e) || (d.low = e);
        f && (c = "High");
        e = Number(a[b.highField + c]);
        isNaN(e) || (d.high = e);
        return d
    },
    parseGraphData: function (a) {
        var b = a.dataProvider,
            c = a.seriesIdField;
        c || (c = this.seriesIdField);
        c || (c = this.categoryField);
        var d;
        for (d =
            0; d < b.length; d++) {
                var e = b[d],
                    f = this.lookupTable[String(e[c])],
                    g = a.valueAxis.id;
                f && (g = f.axes[g].graphs[a.id], g.serialDataItem = f, g.values = this.processValues(e, a, a.periodValue), this.processFields(a, g, e))
            }
    },
    addValueAxis: function (a) {
        a.chart = this;
        this.valueAxes.push(a);
        this.validateData()
    },
    removeValueAxesAndGraphs: function () {
        var a = this.valueAxes,
            b;
        for (b = a.length - 1; - 1 < b; b--) this.removeValueAxis(a[b])
    },
    removeValueAxis: function (a) {
        var b = this.graphs,
            c;
        for (c = b.length - 1; 0 <= c; c--) {
                var d = b[c];
                d && d.valueAxis == a && this.removeGraph(d)
            }
        b = this.valueAxes;
        for (c = b.length - 1; 0 <= c; c--) b[c] == a && b.splice(c, 1);
        this.validateData()
    },
    addGraph: function (a) {
        this.graphs.push(a);
        this.chooseGraphColor(a, this.graphs.length - 1);
        this.validateData()
    },
    removeGraph: function (a) {
        var b = this.graphs,
            c;
        for (c = b.length - 1; 0 <= c; c--) b[c] == a && (b.splice(c, 1), a.destroy());
        this.validateData()
    },
    processValueAxes: function () {
        var a = this.valueAxes,
            b;
        for (b = 0; b < a.length; b++) {
                var c = a[b];
                c.chart = this;
                c.id || (c.id = "valueAxis" + b + "_" + (new Date).getTime());
                if (!0 === this.usePrefixes || !1 === this.usePrefixes) c.usePrefixes = this.usePrefixes
            }
    },
    processGraphs: function () {
        var a = this.graphs,
            b;
        for (b = 0; b < a.length; b++) {
                var c = a[b];
                c.chart = this;
                c.valueAxis || (c.valueAxis = this.valueAxes[0]);
                c.id || (c.id = "graph" + b + "_" + (new Date).getTime())
            }
    },
    formatString: function (a, b) {
        var c = b.graph,
            d = c.valueAxis;
        d.duration && b.values.value && (d = AmCharts.formatDuration(b.values.value, d.duration, "", d.durationUnits, d.maxInterval, d.numberFormatter), a = a.split("[[value]]").join(d));
        a = AmCharts.massReplace(a, {
                "[[title]]": c.title,
                "[[description]]": b.description,
                "<br>": "\n"
            });
        a = AmCharts.fixNewLines(a);
        return a = AmCharts.cleanFromEmpty(a)
    },
    getBalloonColor: function (a, b) {
        var c = a.lineColor,
            d = a.balloonColor,
            e = a.fillColors;
        "object" == typeof e ? c = e[0] : void 0 !== e && (c = e);
        if (b.isNegative) {
                var e = a.negativeLineColor,
                    f = a.negativeFillColors;
                "object" == typeof f ? e = f[0] : void 0 !== f && (e = f);
                void 0 !== e && (c = e)
            }
        void 0 !== b.color && (c = b.color);
        void 0 === d && (d = c);
        return d
    },
    getGraphById: function (a) {
        return this.getObjById(this.graphs, a)
    },
    getValueAxisById: function (a) {
        return this.getObjById(this.valueAxes, a)
    },
    getObjById: function (a, b) {
        var c, d;
        for (d = 0; d < a.length; d++) {
            var e = a[d];
            e.id == b && (c = e)
        }
        return c
    },
    processFields: function (a, b, c) {
        if (a.itemColors) {
            var d = a.itemColors,
                e = b.index;
            b.color = e < d.length ? d[e] : AmCharts.randomColor()
        }
        d = "lineColor color alpha fillColors description bullet customBullet bulletSize bulletConfig url labelColor".split(" ");
        for (e = 0; e < d.length; e++) {
            var f = d[e],
                g = a[f + "Field"];
            g && (g = c[g], AmCharts.isDefined(g) && (b[f] = g))
        }
        b.dataContext =
        c
    },
    chooseGraphColor: function (a, b) {
        if (void 0 == a.lineColor) {
            var c;
            c = this.colors.length > b ? this.colors[b] : AmCharts.randomColor();
            a.lineColor = c
        }
    },
    handleLegendEvent: function (a) {
        var b = a.type;
        if (a = a.dataItem) {
            var c = a.hidden,
                d = a.showBalloon;
            switch (b) {
                case "clickMarker":
                    d ? this.hideGraphsBalloon(a) : this.showGraphsBalloon(a);
                    break;
                case "clickLabel":
                    d ? this.hideGraphsBalloon(a) : this.showGraphsBalloon(a);
                    break;
                case "rollOverItem":
                    c || this.highlightGraph(a);
                    break;
                case "rollOutItem":
                    c || this.unhighlightGraph();
                    break;
                case "hideItem":
                    this.hideGraph(a);
                    break;
                case "showItem":
                    this.showGraph(a)
                }
        }
    },
    highlightGraph: function (a) {
        var b = this.graphs,
            c, d = 0.2;
        this.legend && (d = this.legend.rollOverGraphAlpha);
        if (1 != d) for (c = 0; c < b.length; c++) {
                var e = b[c];
                e != a && e.changeOpacity(d)
            }
    },
    unhighlightGraph: function () {
        var a;
        this.legend && (a = this.legend.rollOverGraphAlpha);
        if (1 != a) {
            a = this.graphs;
            var b;
            for (b = 0; b < a.length; b++) a[b].changeOpacity(1)
        }
    },
    showGraph: function (a) {
        a.hidden = !1;
        this.dataChanged = !0;
        this.marginsUpdated = !1;
        this.chartCreated && this.initChart()
    },
    hideGraph: function (a) {
        this.dataChanged = !0;
        this.marginsUpdated = !1;
        a.hidden = !0;
        this.chartCreated && this.initChart()
    },
    hideGraphsBalloon: function (a) {
        a.showBalloon = !1;
        this.updateLegend()
    },
    showGraphsBalloon: function (a) {
        a.showBalloon = !0;
        this.updateLegend()
    },
    updateLegend: function () {
        this.legend && this.legend.invalidateSize()
    },
    resetAnimation: function () {
        var a = this.graphs;
        if (a) {
            var b;
            for (b = 0; b < a.length; b++) a[b].animationPlayed = !1
        }
    },
    animateAgain: function () {
        this.resetAnimation();
        this.validateNow()
    }
});
AmCharts.AmRectangularChart = AmCharts.Class({
    inherits: AmCharts.AmCoordinateChart,
    construct: function () {
        AmCharts.AmRectangularChart.base.construct.call(this);
        this.createEvents("zoomed");
        this.marginRight = this.marginBottom = this.marginTop = this.marginLeft = 20;
        this.verticalPosition = this.horizontalPosition = this.depth3D = this.angle = 0;
        this.heightMultiplier = this.widthMultiplier = 1;
        this.zoomOutText = "Show all";
        this.zoomOutButton = {
            backgroundColor: "#b2e1ff",
            backgroundAlpha: 1
        };
        this.trendLines = [];
        this.autoMargins = !0;
        this.marginsUpdated = !1;
        this.autoMarginOffset = 10
    },
    initChart: function () {
        AmCharts.AmRectangularChart.base.initChart.call(this);
        this.updateDxy();
        var a = !0;
        !this.marginsUpdated && this.autoMargins && (this.resetMargins(), a = !1);
        this.updateMargins();
        this.updatePlotArea();
        this.updateScrollbars();
        this.updateTrendLines();
        this.updateChartCursor();
        this.updateValueAxes();
        a && (this.scrollbarOnly || this.updateGraphs())
    },
    drawChart: function () {
        AmCharts.AmRectangularChart.base.drawChart.call(this);
        this.drawPlotArea();
        if (AmCharts.ifArray(this.chartData)) {
            var a =
            this.chartCursor;
            a && a.draw();
            a = this.zoomOutText;
            "" !== a && a && this.drawZoomOutButton()
        }
    },
    resetMargins: function () {
        var a = {},
            b;
        if ("serial" == this.chartType) {
                var c = this.valueAxes;
                for (b = 0; b < c.length; b++) {
                    var d = c[b];
                    d.ignoreAxisWidth || (d.setOrientation(this.rotate), d.fixAxisPosition(), a[d.position] = !0)
                }(b = this.categoryAxis) && !b.ignoreAxisWidth && (b.setOrientation(!this.rotate), b.fixAxisPosition(), b.fixAxisPosition(), a[b.position] = !0)
            } else {
                d = this.xAxes;
                c = this.yAxes;
                for (b = 0; b < d.length; b++) {
                    var e = d[b];
                    e.ignoreAxisWidth || (e.setOrientation(!0), e.fixAxisPosition(), a[e.position] = !0)
                }
                for (b = 0; b < c.length; b++) d = c[b],
                d.ignoreAxisWidth || (d.setOrientation(!1), d.fixAxisPosition(), a[d.position] = !0)
            }
        a.left && (this.marginLeft = 0);
        a.right && (this.marginRight = 0);
        a.top && (this.marginTop = 0);
        a.bottom && (this.marginBottom = 0);
        this.fixMargins = a
    },
    measureMargins: function () {
        var a = this.valueAxes,
            b, c = this.autoMarginOffset,
            d = this.fixMargins,
            e = this.realWidth,
            f = this.realHeight,
            g = c,
            h = c,
            k = e - c;
        b = f - c;
        var l;
        for (l = 0; l < a.length; l++) b = this.getAxisBounds(a[l], g, k, h, b),
        g = b.l,
        k = b.r,
        h = b.t,
        b = b.b;
        if (a = this.categoryAxis) b = this.getAxisBounds(a, g, k, h, b),
        g = b.l,
        k = b.r,
        h = b.t,
        b = b.b;
        d.left && g < c && (this.marginLeft = Math.round(-g + c));
        d.right && k > e - c && (this.marginRight = Math.round(k - e + c));
        d.top && h < c + this.titleHeight && (this.marginTop = Math.round(this.marginTop - h + c + this.titleHeight));
        d.bottom && b > f - c && (this.marginBottom = Math.round(b - f + c));
        this.initChart()
    },
    getAxisBounds: function (a, b, c, d, e) {
        if (!a.ignoreAxisWidth) {
            var f = a.labelsSet,
                g = a.tickLength;
            a.inside && (g = 0);
            if (f) switch (f = a.getBBox(), a.position) {
                case "top":
                    a = f.y;
                    d > a && (d = a);
                    break;
                case "bottom":
                    a = f.y + f.height;
                    e < a && (e = a);
                    break;
                case "right":
                    a = f.x + f.width + g + 3;
                    c < a && (c = a);
                    break;
                case "left":
                    a = f.x - g,
                    b > a && (b = a)
                }
        }
        return {
            l: b,
            t: d,
            r: c,
            b: e
        }
    },
    drawZoomOutButton: function () {
        var a = this,
            b = a.container.set();
        a.zoomButtonSet.push(b);
        var c = a.color,
            d = a.fontSize,
            e = a.zoomOutButton;
        e && (e.fontSize && (d = e.fontSize), e.color && (c = e.color));
        c = AmCharts.text(a.container, a.zoomOutText, c, a.fontFamily, d, "start");
        d = c.getBBox();
        c.translate(29, 6 + d.height / 2);
        e = AmCharts.rect(a.container, d.width + 40, d.height + 15, e.backgroundColor, e.backgroundAlpha);
        b.push(e);
        a.zbBG = e;
        void 0 !== a.pathToImages && (e = a.container.image(a.pathToImages + "lens.png", 0, 0, 16, 16), e.translate(7, d.height / 2 - 1), e.toFront(), b.push(e));
        c.toFront();
        b.push(c);
        e = b.getBBox();
        b.translate(a.marginLeftReal + a.plotAreaWidth - e.width, a.marginTopReal);
        b.hide();
        b.mouseover(function () {
                a.rollOverZB()
            }).mouseout(function () {
                a.rollOutZB()
            }).click(function () {
                a.clickZB()
            }).touchstart(function () {
                a.rollOverZB()
            }).touchend(function () {
                a.rollOutZB();
                a.clickZB()
            });
        for (e = 0; e < b.length; e++) b[e].attr({
                cursor: "pointer"
            });
        a.zbSet = b
    },
    rollOverZB: function () {
        this.zbBG.show()
    },
    rollOutZB: function () {
        this.zbBG.hide()
    },
    clickZB: function () {
        this.zoomOut()
    },
    zoomOut: function () {
        this.updateScrollbar = !0;
        this.zoom()
    },
    drawPlotArea: function () {
        var a = this.dx,
            b = this.dy,
            c = this.marginLeftReal,
            d = this.marginTopReal,
            e = this.plotAreaWidth - 1,
            f = this.plotAreaHeight - 1,
            g = this.plotAreaFillColors,
            h = this.plotAreaFillAlphas,
            k = this.plotAreaBorderColor,
            l = this.plotAreaBorderAlpha;
        this.trendLinesSet.clipRect(c, d, e, f);
        "object" == typeof h && (h = h[0]);
        g = AmCharts.polygon(this.container, [0, e, e, 0], [0, 0, f, f], g, h, 1, k, l, this.plotAreaGradientAngle);
        g.translate(c + a, d + b);
        g.node.setAttribute("class", "amChartsPlotArea");
        this.set.push(g);
        0 !== a && 0 !== b && (g = this.plotAreaFillColors, "object" == typeof g && (g = g[0]), g = AmCharts.adjustLuminosity(g, -0.15), e = AmCharts.polygon(this.container, [0, a, e + a, e, 0], [0, b, b, 0, 0], g, h, 1, k, l), e.translate(c, d + f), this.set.push(e), a = AmCharts.polygon(this.container, [0, 0, a, a, 0], [0, f, f + b, b, 0], g, h, 1, k, l), a.translate(c, d), this.set.push(a))
    },
    updatePlotArea: function () {
        var a = this.updateWidth(),
            b = this.updateHeight(),
            c = this.container;
        this.realWidth = a;
        this.realWidth = b;
        c && this.container.setSize(a, b);
        a = a - this.marginLeftReal - this.marginRightReal - this.dx;
        b = b - this.marginTopReal - this.marginBottomReal;
        1 > a && (a = 1);
        1 > b && (b = 1);
        this.plotAreaWidth = Math.round(a);
        this.plotAreaHeight = Math.round(b)
    },
    updateDxy: function () {
        this.dx = Math.round(this.depth3D * Math.cos(this.angle * Math.PI / 180));
        this.dy = Math.round(-this.depth3D * Math.sin(this.angle * Math.PI / 180));
        this.d3x = Math.round(this.columnSpacing3D * Math.cos(this.angle * Math.PI / 180));
        this.d3y = Math.round(-this.columnSpacing3D * Math.sin(this.angle * Math.PI / 180))
    },
    updateMargins: function () {
        var a = this.getTitleHeight();
        this.titleHeight = a;
        this.marginTopReal = this.marginTop - this.dy + a;
        this.marginBottomReal = this.marginBottom;
        this.marginLeftReal = this.marginLeft;
        this.marginRightReal = this.marginRight
    },
    updateValueAxes: function () {
        var a = this.valueAxes,
            b = this.marginLeftReal,
            c = this.marginTopReal,
            d = this.plotAreaHeight,
            e = this.plotAreaWidth,
            f;
        for (f = 0; f < a.length; f++) {
                var g = a[f];
                g.axisRenderer = AmCharts.RecAxis;
                g.guideFillRenderer = AmCharts.RecFill;
                g.axisItemRenderer = AmCharts.RecItem;
                g.dx = this.dx;
                g.dy = this.dy;
                g.viW = e - 1;
                g.viH = d - 1;
                g.marginsChanged = !0;
                g.viX = b;
                g.viY = c;
                this.updateObjectSize(g)
            }
    },
    updateObjectSize: function (a) {
        a.width = (this.plotAreaWidth - 1) * this.widthMultiplier;
        a.height = (this.plotAreaHeight - 1) * this.heightMultiplier;
        a.x = this.marginLeftReal + this.horizontalPosition;
        a.y = this.marginTopReal + this.verticalPosition
    },
    updateGraphs: function () {
        var a = this.graphs,
            b;
        for (b = 0; b < a.length; b++) {
                var c = a[b];
                c.x = this.marginLeftReal + this.horizontalPosition;
                c.y = this.marginTopReal + this.verticalPosition;
                c.width = this.plotAreaWidth * this.widthMultiplier;
                c.height = this.plotAreaHeight * this.heightMultiplier;
                c.index = b;
                c.dx = this.dx;
                c.dy = this.dy;
                c.rotate = this.rotate;
                c.chartType = this.chartType
            }
    },
    updateChartCursor: function () {
        var a = this.chartCursor;
        a && (a.x = this.marginLeftReal, a.y = this.marginTopReal, a.width = this.plotAreaWidth - 1, a.height = this.plotAreaHeight - 1, a.chart = this)
    },
    updateScrollbars: function () {},
    addChartCursor: function (a) {
        AmCharts.callMethod("destroy", [this.chartCursor]);
        a && (this.listenTo(a, "changed", this.handleCursorChange), this.listenTo(a, "zoomed", this.handleCursorZoom));
        this.chartCursor = a
    },
    removeChartCursor: function () {
        AmCharts.callMethod("destroy", [this.chartCursor]);
        this.chartCursor = null
    },
    zoomTrendLines: function () {
        var a = this.trendLines,
            b;
        for (b = 0; b < a.length; b++) {
                var c = a[b];
                c.valueAxis.recalculateToPercents ? c.set && c.set.hide() : (c.x = this.marginLeftReal + this.horizontalPosition, c.y = this.marginTopReal + this.verticalPosition, c.draw())
            }
    },
    addTrendLine: function (a) {
        this.trendLines.push(a)
    },
    removeTrendLine: function (a) {
        var b = this.trendLines,
            c;
        for (c = b.length - 1; 0 <= c; c--) b[c] == a && b.splice(c, 1)
    },
    adjustMargins: function (a, b) {
        var c = a.scrollbarHeight;
        "top" == a.position ? b ? this.marginLeftReal += c : this.marginTopReal += c : b ? this.marginRightReal += c : this.marginBottomReal += c
    },
    getScrollbarPosition: function (a, b, c) {
        a.position = b ? "bottom" == c || "left" == c ? "bottom" : "top" : "top" == c || "right" == c ? "bottom" : "top"
    },
    updateChartScrollbar: function (a, b) {
        if (a) {
            a.rotate = b;
            var c = this.marginTopReal,
                d = this.marginLeftReal,
                e = a.scrollbarHeight,
                f = this.dx,
                g = this.dy;
            "top" == a.position ? b ? (a.y = c, a.x = d - e) : (a.y = c - e + g, a.x = d + f) : b ? (a.y = c + g, a.x = d + this.plotAreaWidth + f) : (a.y = c + this.plotAreaHeight + 1, a.x = this.marginLeftReal)
        }
    },
    showZB: function (a) {
        var b = this.zbSet;
        b && (a ? b.show() : b.hide(), this.zbBG.hide())
    },
    handleReleaseOutside: function (a) {
        AmCharts.AmRectangularChart.base.handleReleaseOutside.call(this, a);
        (a = this.chartCursor) && a.handleReleaseOutside()
    },
    handleMouseDown: function (a) {
        AmCharts.AmRectangularChart.base.handleMouseDown.call(this, a);
        var b = this.chartCursor;
        b && b.handleMouseDown(a)
    },
    handleCursorChange: function (a) {}
});
AmCharts.TrendLine = AmCharts.Class({
    construct: function () {
        this.createEvents("click");
        this.isProtected = !1;
        this.dashLength = 0;
        this.lineColor = "#00CC00";
        this.lineThickness = this.lineAlpha = 1
    },
    draw: function () {
        var a = this;
        a.destroy();
        var b = a.chart,
            c = b.container,
            d, e, f, g, h = a.categoryAxis,
            k = a.initialDate,
            l = a.initialCategory,
            m = a.finalDate,
            n = a.finalCategory,
            r = a.valueAxis,
            p = a.valueAxisX,
            s = a.initialXValue,
            q = a.finalXValue,
            t = a.initialValue,
            v = a.finalValue,
            u = r.recalculateToPercents;
        h && (k && (d = h.dateToCoordinate(k)), l && (d =
            h.categoryToCoordinate(l)), m && (e = h.dateToCoordinate(m)), n && (e = h.categoryToCoordinate(n)));
        p && !u && (isNaN(s) || (d = p.getCoordinate(s)), isNaN(q) || (e = p.getCoordinate(q)));
        r && !u && (isNaN(t) || (f = r.getCoordinate(t)), isNaN(v) || (g = r.getCoordinate(v)));
        isNaN(d) || (isNaN(e) || isNaN(f) || isNaN(f)) || (b.rotate ? (h = [f, g], e = [d, e]) : (h = [d, e], e = [f, g]), f = a.lineColor, d = AmCharts.line(c, h, e, f, a.lineAlpha, a.lineThickness, a.dashLength), e = AmCharts.line(c, h, e, f, 0.005, 5), c = c.set([d, e]), c.translate(b.marginLeftReal, b.marginTopReal), b.trendLinesSet.push(c), a.line = d, a.set = c, e.mouseup(function () {
                a.handleLineClick()
            }).mouseover(function () {
                a.handleLineOver()
            }).mouseout(function () {
                a.handleLineOut()
            }), e.touchend && e.touchend(function () {
                a.handleLineClick()
            }))
    },
    handleLineClick: function () {
        var a = {
            type: "click",
            trendLine: this,
            chart: this.chart
        };
        this.fire(a.type, a)
    },
    handleLineOver: function () {
        var a = this.rollOverColor;
        void 0 !== a && this.line.attr({
            stroke: a
        })
    },
    handleLineOut: function () {
        this.line.attr({
            stroke: this.lineColor
        })
    },
    destroy: function () {
        AmCharts.remove(this.set)
    }
});
AmCharts.AmSerialChart = AmCharts.Class({
    inherits: AmCharts.AmRectangularChart,
    construct: function () {
        AmCharts.AmSerialChart.base.construct.call(this);
        this.createEvents("changed");
        this.columnSpacing = 5;
        this.columnSpacing3D = 0;
        this.columnWidth = 0.8;
        this.updateScrollbar = !0;
        var a = new AmCharts.CategoryAxis;
        a.chart = this;
        this.categoryAxis = a;
        this.chartType = "serial";
        this.zoomOutOnDataUpdate = !0;
        this.skipZoom = !1;
        this.minSelectedTime = 0
    },
    initChart: function () {
        AmCharts.AmSerialChart.base.initChart.call(this);
        this.updateCategoryAxis();
        this.dataChanged && (this.updateData(), this.dataChanged = !1, this.dispatchDataUpdated = !0);
        var a = this.chartCursor;
        a && a.updateData();
        var a = this.countColumns(),
            b = this.graphs,
            c;
        for (c = 0; c < b.length; c++) b[c].columnCount = a;
        this.updateScrollbar = !0;
        this.drawChart();
        this.autoMargins && !this.marginsUpdated && (this.marginsUpdated = !0, this.measureMargins())
    },
    validateData: function (a) {
        this.marginsUpdated = !1;
        this.zoomOutOnDataUpdate && !a && (this.endTime = this.end = this.startTime = this.start = NaN);
        AmCharts.AmSerialChart.base.validateData.call(this)
    },
    drawChart: function () {
        AmCharts.AmSerialChart.base.drawChart.call(this);
        var a = this.chartData;
        if (AmCharts.ifArray(a)) {
            var b = this.chartScrollbar;
            b && b.draw();
            if (0 < this.realWidth && 0 < this.realHeight) {
                var a = a.length - 1,
                    c, b = this.categoryAxis;
                if (b.parseDates && !b.equalSpacing) {
                        if (b = this.startTime, c = this.endTime, isNaN(b) || isNaN(c)) b = this.firstTime,
                        c = this.lastTime
                    } else if (b = this.start, c = this.end, isNaN(b) || isNaN(c)) b = 0,
                c = a;
                this.endTime = this.startTime = this.end = this.start = void 0;
                this.zoom(b, c)
            }
        } else this.cleanChart();
        this.dispDUpd();
        this.chartCreated = !0
    },
    cleanChart: function () {
        AmCharts.callMethod("destroy", [this.valueAxes, this.graphs, this.categoryAxis, this.chartScrollbar, this.chartCursor])
    },
    updateCategoryAxis: function () {
        var a = this.categoryAxis;
        a.id = "categoryAxis";
        a.rotate = this.rotate;
        a.axisRenderer = AmCharts.RecAxis;
        a.guideFillRenderer = AmCharts.RecFill;
        a.axisItemRenderer = AmCharts.RecItem;
        a.setOrientation(!this.rotate);
        a.x = this.marginLeftReal;
        a.y = this.marginTopReal;
        a.dx = this.dx;
        a.dy = this.dy;
        a.width = this.plotAreaWidth - 1;
        a.height = this.plotAreaHeight - 1;
        a.viW = this.plotAreaWidth - 1;
        a.viH = this.plotAreaHeight - 1;
        a.viX = this.marginLeftReal;
        a.viY = this.marginTopReal;
        a.marginsChanged = !0
    },
    updateValueAxes: function () {
        AmCharts.AmSerialChart.base.updateValueAxes.call(this);
        var a = this.valueAxes,
            b;
        for (b = 0; b < a.length; b++) {
                var c = a[b],
                    d = this.rotate;
                c.rotate = d;
                c.setOrientation(d);
                d = this.categoryAxis;
                if (!d.startOnAxis || d.parseDates) c.expandMinMax = !0
            }
    },
    updateData: function () {
        this.parseData();
        var a = this.graphs,
            b, c = this.chartData;
        for (b = 0; b < a.length; b++) a[b].data = c;
        0 < c.length && (this.firstTime = this.getStartTime(c[0].time), this.lastTime = this.getEndTime(c[c.length - 1].time))
    },
    getStartTime: function (a) {
        var b = this.categoryAxis;
        return AmCharts.resetDateToMin(new Date(a), b.minPeriod, 1, b.firstDayOfWeek).getTime()
    },
    getEndTime: function (a) {
        var b = AmCharts.extractPeriod(this.categoryAxis.minPeriod);
        return AmCharts.changeDate(new Date(a), b.period, b.count, !0).getTime() - 1
    },
    updateMargins: function () {
        AmCharts.AmSerialChart.base.updateMargins.call(this);
        var a = this.chartScrollbar;
        a && (this.getScrollbarPosition(a, this.rotate, this.categoryAxis.position), this.adjustMargins(a, this.rotate))
    },
    updateScrollbars: function () {
        this.updateChartScrollbar(this.chartScrollbar, this.rotate)
    },
    zoom: function (a, b) {
        var c = this.categoryAxis;
        c.parseDates && !c.equalSpacing ? this.timeZoom(a, b) : this.indexZoom(a, b)
    },
    timeZoom: function (a, b) {
        var c = this.maxSelectedTime;
        isNaN(c) || (b != this.endTime && b - a > c && (a = b - c, this.updateScrollbar = !0), a != this.startTime && b - a > c && (b = a + c, this.updateScrollbar = !0));
        var d = this.minSelectedTime;
        if (0 < d && b - a < d) {
            var e = Math.round(a + (b - a) / 2),
                d = Math.round(d / 2);
            a = e - d;
            b = e + d
        }
        var f = this.chartData,
            e = this.categoryAxis;
        if (AmCharts.ifArray(f) && (a != this.startTime || b != this.endTime)) {
                var g = e.minDuration(),
                    d = this.firstTime,
                    h = this.lastTime;
                a || (a = d, isNaN(c) || (a = h - c));
                b || (b = h);
                a > h && (a = h);
                b < d && (b = d);
                a < d && (a = d);
                b > h && (b = h);
                b < a && (b = a + g);
                b - a < g / 5 && (b < h ? b = a + g / 5 : a = b - g / 5);
                this.startTime = a;
                this.endTime = b;
                c = f.length - 1;
                g = this.getClosestIndex(f, "time", a, !0, 0, c);
                f = this.getClosestIndex(f, "time", b, !1, g, c);
                e.timeZoom(a, b);
                e.zoom(g, f);
                this.start = AmCharts.fitToBounds(g, 0, c);
                this.end = AmCharts.fitToBounds(f, 0, c);
                this.zoomAxesAndGraphs();
                this.zoomScrollbar();
                a != d || b != h ? this.showZB(!0) : this.showZB(!1);
                this.updateColumnsDepth();
                this.dispatchTimeZoomEvent()
            }
    },
    indexZoom: function (a, b) {
        var c = this.maxSelectedSeries;
        isNaN(c) || (b != this.end && b - a > c && (a = b - c, this.updateScrollbar = !0), a != this.start && b - a > c && (b = a + c, this.updateScrollbar = !0));
        if (a != this.start || b != this.end) {
            var d = this.chartData.length - 1;
            isNaN(a) && (a = 0, isNaN(c) || (a = d - c));
            isNaN(b) && (b = d);
            b < a && (b = a);
            b > d && (b = d);
            a > d && (a = d - 1);
            0 > a && (a = 0);
            this.start = a;
            this.end = b;
            this.categoryAxis.zoom(a, b);
            this.zoomAxesAndGraphs();
            this.zoomScrollbar();
            0 !== a || b != this.chartData.length - 1 ? this.showZB(!0) : this.showZB(!1);
            this.updateColumnsDepth();
            this.dispatchIndexZoomEvent()
        }
    },
    updateGraphs: function () {
        AmCharts.AmSerialChart.base.updateGraphs.call(this);
        var a = this.graphs,
            b;
        for (b = 0; b < a.length; b++) {
                var c = a[b];
                c.columnWidth = this.columnWidth;
                c.categoryAxis = this.categoryAxis
            }
    },
    updateColumnsDepth: function () {
        var a, b = this.graphs,
            c;
        AmCharts.remove(this.columnsSet);
        this.columnsArray = [];
        for (a = 0; a < b.length; a++) {
                c = b[a];
                var d = c.columnsArray;
                if (d) {
                    var e;
                    for (e = 0; e < d.length; e++) this.columnsArray.push(d[e])
                }
            }
        this.columnsArray.sort(this.compareDepth);
        if (0 < this.columnsArray.length) {
                b = this.container.set();
                this.columnSet.push(b);
                for (a = 0; a < this.columnsArray.length; a++) b.push(this.columnsArray[a].column.set);
                c && b.translate(c.x, c.y);
                this.columnsSet = b
            }
    },
    compareDepth: function (a, b) {
        return a.depth > b.depth ? 1 : -1
    },
    zoomScrollbar: function () {
        var a = this.chartScrollbar,
            b = this.categoryAxis;
        a && this.updateScrollbar && (b.parseDates && !b.equalSpacing ? a.timeZoom(this.startTime, this.endTime) : a.zoom(this.start, this.end), this.updateScrollbar = !0)
    },
    updateTrendLines: function () {
        var a = this.trendLines,
            b;
        for (b = 0; b < a.length; b++) {
                var c = a[b];
                c.chart = this;
                c.valueAxis || (c.valueAxis = this.valueAxes[0]);
                c.categoryAxis = this.categoryAxis
            }
    },
    zoomAxesAndGraphs: function () {
        if (!this.scrollbarOnly) {
            var a = this.valueAxes,
                b;
            for (b = 0; b < a.length; b++) a[b].zoom(this.start, this.end);
            a = this.graphs;
            for (b = 0; b < a.length; b++) a[b].zoom(this.start, this.end);
            this.zoomTrendLines();
                (b = this.chartCursor) && b.zoom(this.start, this.end, this.startTime, this.endTime)
        }
    },
    countColumns: function () {
        var a = 0,
            b = this.valueAxes.length,
            c = this.graphs.length,
            d, e, f = !1,
            g, h;
        for (h = 0; h < b; h++) {
                e = this.valueAxes[h];
                var k = e.stackType;
                if ("100%" == k || "regular" == k) for (f = !1, g = 0; g < c; g++) d = this.graphs[g],
                d.hidden || (d.valueAxis != e || "column" != d.type) || (!f && d.stackable && (a++, f = !0), d.stackable || a++, d.columnIndex = a - 1);
                if ("none" == k || "3d" == k) for (g = 0; g < c; g++) d = this.graphs[g],
                d.hidden || (d.valueAxis != e || "column" != d.type) || (d.columnIndex = a, a++);
                if ("3d" == k) {
                    for (h = 0; h < c; h++) d = this.graphs[h],
                    d.depthCount = a;
                    a = 1
                }
            }
        return a
    },
    parseData: function () {
        AmCharts.AmSerialChart.base.parseData.call(this);
        this.parseSerialData()
    },
    getCategoryIndexByValue: function (a) {
        var b = this.chartData,
            c, d;
        for (d = 0; d < b.length; d++) b[d].category == a && (c = d);
        return c
    },
    handleCursorChange: function (a) {
        this.updateLegendValues(a.index)
    },
    handleCursorZoom: function (a) {
        this.updateScrollbar = !0;
        this.zoom(a.start, a.end)
    },
    handleScrollbarZoom: function (a) {
        this.updateScrollbar = !1;
        this.zoom(a.start, a.end)
    },
    dispatchTimeZoomEvent: function () {
        if (this.prevStartTime != this.startTime || this.prevEndTime != this.endTime) {
            var a = {
                type: "zoomed"
            };
            a.startDate = new Date(this.startTime);
            a.endDate = new Date(this.endTime);
            a.startIndex = this.start;
            a.endIndex = this.end;
            this.startIndex = this.start;
            this.endIndex = this.end;
            this.startDate = a.startDate;
            this.endDate = a.endDate;
            this.prevStartTime = this.startTime;
            this.prevEndTime =
            this.endTime;
            var b = this.categoryAxis,
                c = AmCharts.extractPeriod(b.minPeriod).period,
                b = b.dateFormatsObject[c];
            a.startValue = AmCharts.formatDate(a.startDate, b);
            a.endValue = AmCharts.formatDate(a.endDate, b);
            a.chart = this;
            a.target = this;
            this.fire(a.type, a)
        }
    },
    dispatchIndexZoomEvent: function () {
        if (this.prevStartIndex != this.start || this.prevEndIndex != this.end) {
            this.startIndex = this.start;
            this.endIndex = this.end;
            var a = this.chartData;
            if (AmCharts.ifArray(a) && !isNaN(this.start) && !isNaN(this.end)) {
                var b = {
                    chart: this,
                    target: this,
                    type: "zoomed"
                };
                b.startIndex = this.start;
                b.endIndex = this.end;
                b.startValue = a[this.start].category;
                b.endValue = a[this.end].category;
                this.categoryAxis.parseDates && (this.startTime = a[this.start].time, this.endTime = a[this.end].time, b.startDate = new Date(this.startTime), b.endDate = new Date(this.endTime));
                this.prevStartIndex = this.start;
                this.prevEndIndex = this.end;
                this.fire(b.type, b)
            }
        }
    },
    updateLegendValues: function (a) {
        var b = this.graphs,
            c;
        for (c = 0; c < b.length; c++) {
                var d = b[c];
                isNaN(a) ? d.currentDataItem = void 0 : d.currentDataItem =
                this.chartData[a].axes[d.valueAxis.id].graphs[d.id]
            }
        this.legend && this.legend.updateValues()
    },
    getClosestIndex: function (a, b, c, d, e, f) {
        0 > e && (e = 0);
        f > a.length - 1 && (f = a.length - 1);
        var g = e + Math.round((f - e) / 2),
            h = a[g][b];
        if (1 >= f - e) {
                if (d) return e;
                d = a[f][b];
                return Math.abs(a[e][b] - c) < Math.abs(d - c) ? e : f
            }
        return c == h ? g : c < h ? this.getClosestIndex(a, b, c, d, e, g) : this.getClosestIndex(a, b, c, d, g, f)
    },
    zoomToIndexes: function (a, b) {
        this.updateScrollbar = !0;
        var c = this.chartData;
        if (c) {
            var d = c.length;
            0 < d && (0 > a && (a = 0), b > d - 1 && (b = d - 1), d = this.categoryAxis, d.parseDates && !d.equalSpacing ? this.zoom(c[a].time, this.getEndTime(c[b].time)) : this.zoom(a, b))
        }
    },
    zoomToDates: function (a, b) {
        this.updateScrollbar = !0;
        var c = this.chartData;
        if (this.categoryAxis.equalSpacing) {
            var d = this.getClosestIndex(c, "time", a.getTime(), !0, 0, c.length),
                c = this.getClosestIndex(c, "time", b.getTime(), !1, 0, c.length);
            this.zoom(d, c)
        } else this.zoom(a.getTime(), b.getTime())
    },
    zoomToCategoryValues: function (a, b) {
        this.updateScrollbar = !0;
        this.zoom(this.getCategoryIndexByValue(a), this.getCategoryIndexByValue(b))
    },
    formatString: function (a, b) {
        var c = b.graph;
        if (-1 != a.indexOf("[[category]]")) {
            var d = b.serialDataItem.category;
            if (this.categoryAxis.parseDates) {
                var e = this.balloonDateFormat,
                    f = this.chartCursor;
                f && (e = f.categoryBalloonDateFormat); - 1 != a.indexOf("[[category]]") && (e = AmCharts.formatDate(d, e), -1 != e.indexOf("fff") && (e = AmCharts.formatMilliseconds(e, d)), d = e)
            }
            a = a.replace(/\[\[category\]\]/g, String(d))
        }
        c = c.numberFormatter;
        c || (c = this.numberFormatter);
        d = b.graph.valueAxis;
        (e = d.duration) && !isNaN(b.values.value) && (d = AmCharts.formatDuration(b.values.value, e, "", d.durationUnits, d.maxInterval, c), a = a.replace(RegExp("\\[\\[value\\]\\]", "g"), d));
        d = "value open low high close total".split(" ");
        e = this.percentFormatter;
        a = AmCharts.formatValue(a, b.percents, d, e, "percents\\.");
        a = AmCharts.formatValue(a, b.values, d, c, "", this.usePrefixes, this.prefixesOfSmallNumbers, this.prefixesOfBigNumbers);
        a = AmCharts.formatValue(a, b.values, ["percents"], e); - 1 != a.indexOf("[[") && (a = AmCharts.formatDataContextValue(a, b.dataContext));
        return a = AmCharts.AmSerialChart.base.formatString.call(this, a, b)
    },
    addChartScrollbar: function (a) {
        AmCharts.callMethod("destroy", [this.chartScrollbar]);
        a && (a.chart = this, this.listenTo(a, "zoomed", this.handleScrollbarZoom));
        this.rotate ? void 0 === a.width && (a.width = a.scrollbarHeight) : void 0 === a.height && (a.height = a.scrollbarHeight);
        this.chartScrollbar = a
    },
    removeChartScrollbar: function () {
        AmCharts.callMethod("destroy", [this.chartScrollbar]);
        this.chartScrollbar = null
    },
    handleReleaseOutside: function (a) {
        AmCharts.AmSerialChart.base.handleReleaseOutside.call(this, a);
        AmCharts.callMethod("handleReleaseOutside", [this.chartScrollbar])
    }
});
AmCharts.AmRadarChart = AmCharts.Class({
    inherits: AmCharts.AmCoordinateChart,
    construct: function () {
        AmCharts.AmRadarChart.base.construct.call(this);
        this.marginRight = this.marginBottom = this.marginTop = this.marginLeft = 0;
        this.chartType = "radar";
        this.radius = "35%"
    },
    initChart: function () {
        AmCharts.AmRadarChart.base.initChart.call(this);
        this.dataChanged && (this.updateData(), this.dataChanged = !1, this.dispatchDataUpdated = !0);
        this.drawChart()
    },
    updateData: function () {
        this.parseData();
        var a = this.graphs,
            b;
        for (b = 0; b < a.length; b++) a[b].data =
        this.chartData
    },
    updateGraphs: function () {
        var a = this.graphs,
            b;
        for (b = 0; b < a.length; b++) {
                var c = a[b];
                c.index = b;
                c.width = this.realRadius;
                c.height = this.realRadius;
                c.x = this.marginLeftReal;
                c.y = this.marginTopReal;
                c.chartType = this.chartType
            }
    },
    parseData: function () {
        AmCharts.AmRadarChart.base.parseData.call(this);
        this.parseSerialData()
    },
    updateValueAxes: function () {
        var a = this.valueAxes,
            b;
        for (b = 0; b < a.length; b++) {
                var c = a[b];
                c.axisRenderer = AmCharts.RadAxis;
                c.guideFillRenderer = AmCharts.RadarFill;
                c.axisItemRenderer = AmCharts.RadItem;
                c.autoGridCount = !1;
                c.x = this.marginLeftReal;
                c.y = this.marginTopReal;
                c.width = this.realRadius;
                c.height = this.realRadius
            }
    },
    drawChart: function () {
        AmCharts.AmRadarChart.base.drawChart.call(this);
        var a = this.updateWidth(),
            b = this.updateHeight(),
            c = this.marginTop + this.getTitleHeight(),
            d = this.marginLeft,
            b = b - c - this.marginBottom;
        this.marginLeftReal = d + (a - d - this.marginRight) / 2;
        this.marginTopReal = c + b / 2;
        this.realRadius = AmCharts.toCoordinate(this.radius, a, b);
        this.updateValueAxes();
        this.updateGraphs();
        a = this.chartData;
        if (AmCharts.ifArray(a)) {
                if (0 < this.realWidth && 0 < this.realHeight) {
                    a = a.length - 1;
                    d = this.valueAxes;
                    for (c = 0; c < d.length; c++) d[c].zoom(0, a);
                    d = this.graphs;
                    for (c = 0; c < d.length; c++) d[c].zoom(0, a);
                    (a = this.legend) && a.invalidateSize()
                }
            } else this.cleanChart();
        this.dispDUpd();
        this.chartCreated = !0
    },
    formatString: function (a, b) {
        var c = b.graph; - 1 != a.indexOf("[[category]]") && (a = a.replace(/\[\[category\]\]/g, String(b.serialDataItem.category)));
        c = c.numberFormatter;
        c || (c = this.numberFormatter);
        a = AmCharts.formatValue(a, b.values, ["value"], c, "", this.usePrefixes, this.prefixesOfSmallNumbers, this.prefixesOfBigNumbers);
        return a = AmCharts.AmRadarChart.base.formatString.call(this, a, b)
    },
    cleanChart: function () {
        AmCharts.callMethod("destroy", [this.valueAxes, this.graphs])
    }
});
AmCharts.AxisBase = AmCharts.Class({
    construct: function () {
        this.viY = this.viX = this.y = this.x = this.dy = this.dx = 0;
        this.axisThickness = 1;
        this.axisColor = "#000000";
        this.axisAlpha = 1;
        this.gridCount = this.tickLength = 5;
        this.gridAlpha = 0.15;
        this.gridThickness = 1;
        this.gridColor = "#000000";
        this.dashLength = 0;
        this.labelFrequency = 1;
        this.showLastLabel = this.showFirstLabel = !0;
        this.fillColor = "#FFFFFF";
        this.fillAlpha = 0;
        this.labelsEnabled = !0;
        this.labelRotation = 0;
        this.autoGridCount = !0;
        this.valueRollOverColor = "#CC0000";
        this.offset =
        0;
        this.guides = [];
        this.visible = !0;
        this.counter = 0;
        this.guides = [];
        this.ignoreAxisWidth = this.inside = !1;
        this.minGap = 75;
        this.titleBold = !0
    },
    zoom: function (a, b) {
        this.start = a;
        this.end = b;
        this.dataChanged = !0;
        this.draw()
    },
    fixAxisPosition: function () {
        var a = this.position;
        "H" == this.orientation ? ("left" == a && (a = "bottom"), "right" == a && (a = "top")) : ("bottom" == a && (a = "left"), "top" == a && (a = "right"));
        this.position = a
    },
    draw: function () {
        var a = this.chart;
        void 0 === this.titleColor && (this.titleColor = a.color);
        isNaN(this.titleFontSize) && (this.titleFontSize = a.fontSize + 1);
        this.allLabels = [];
        this.counter = 0;
        this.destroy();
        this.fixAxisPosition();
        this.labels = [];
        var b = a.container,
            c = b.set();
        a.gridSet.push(c);
        this.set = c;
        b = b.set();
        a.axesLabelsSet.push(b);
        this.labelsSet = b;
        this.axisLine = new this.axisRenderer(this);
        this.autoGridCount && ("V" == this.orientation ? (a = this.height / 35, 3 > a && (a = 3)) : a = this.width / this.minGap, this.gridCount = Math.max(a, 1));
        this.axisWidth = this.axisLine.axisWidth;
        this.addTitle()
    },
    setOrientation: function (a) {
        this.orientation = a ? "H" : "V"
    },
    addTitle: function () {
        var a = this.title;
        if (a) {
            var b = this.chart;
            this.titleLabel = AmCharts.text(b.container, a, this.titleColor, b.fontFamily, this.titleFontSize, "middle", this.titleBold)
        }
    },
    positionTitle: function () {
        var a = this.titleLabel;
        if (a) {
            var b, c, d = this.labelsSet,
                e = {};
            0 < d.length() ? e = d.getBBox() : (e.x = 0, e.y = 0, e.width = this.viW, e.height = this.viH);
            d.push(a);
            var d = e.x,
                f = e.y;
            AmCharts.VML && (this.rotate ? d -= this.x : f -= this.y);
            var g = e.width,
                e = e.height,
                h = this.viW,
                k = this.viH;
            a.getBBox();
            var l = 0,
                m = this.titleFontSize / 2,
                n = this.inside;
            switch (this.position) {
                case "top":
                    b = h / 2;
                    c = f - 10 - m;
                    break;
                case "bottom":
                    b = h / 2;
                    c = f + e + 10 + m;
                    break;
                case "left":
                    b = d - 10 - m;
                    n && (b -= 5);
                    c = k / 2;
                    l = -90;
                    break;
                case "right":
                    b = d + g + 10 + m - 3,
                    n && (b += 7),
                    c = k / 2,
                    l = -90
                }
            this.marginsChanged ? (a.translate(b, c), this.tx = b, this.ty = c) : a.translate(this.tx, this.ty);
            this.marginsChanged = !1;
            0 !== l && a.rotate(l)
        }
    },
    pushAxisItem: function (a, b) {
        var c = a.graphics();
        0 < c.length() && (b ? this.labelsSet.push(c) : this.set.push(c));
        (c = a.getLabel()) && this.labelsSet.push(c)
    },
    addGuide: function (a) {
        this.guides.push(a)
    },
    removeGuide: function (a) {
        var b = this.guides,
            c;
        for (c = 0; c < b.length; c++) b[c] == a && b.splice(c, 1)
    },
    handleGuideOver: function (a) {
        clearTimeout(this.chart.hoverInt);
        var b = a.graphics.getBBox(),
            c = b.x + b.width / 2,
            b = b.y + b.height / 2,
            d = a.fillColor;
        void 0 === d && (d = a.lineColor);
        this.chart.showBalloon(a.balloonText, d, !0, c, b)
    },
    handleGuideOut: function (a) {
        this.chart.hideBalloon()
    },
    addEventListeners: function (a, b) {
        var c = this;
        a.mouseover(function () {
            c.handleGuideOver(b)
        });
        a.mouseout(function () {
            c.handleGuideOut(b)
        })
    },
    getBBox: function () {
        var a =
        this.labelsSet.getBBox();
        AmCharts.VML || (a = {
            x: a.x + this.x,
            y: a.y + this.y,
            width: a.width,
            height: a.height
        });
        return a
    },
    destroy: function () {
        AmCharts.remove(this.set);
        AmCharts.remove(this.labelsSet);
        var a = this.axisLine;
        a && AmCharts.remove(a.set);
        AmCharts.remove(this.grid0)
    }
});
AmCharts.ValueAxis = AmCharts.Class({
    inherits: AmCharts.AxisBase,
    construct: function () {
        this.createEvents("axisChanged", "logarithmicAxisFailed", "axisSelfZoomed", "axisZoomed");
        AmCharts.ValueAxis.base.construct.call(this);
        this.dataChanged = !0;
        this.gridCount = 8;
        this.stackType = "none";
        this.position = "left";
        this.unitPosition = "right";
        this.recalculateToPercents = this.includeHidden = this.includeGuidesInMinMax = this.integersOnly = !1;
        this.durationUnits = {
            DD: "d. ",
            hh: ":",
            mm: ":",
            ss: ""
        };
        this.scrollbar = !1;
        this.baseValue = 0;
        this.radarCategoriesEnabled = !0;
        this.gridType = "polygons";
        this.useScientificNotation = !1;
        this.axisTitleOffset = 10;
        this.minMaxMultiplier = 1
    },
    updateData: function () {
        0 >= this.gridCount && (this.gridCount = 1);
        this.totals = [];
        this.data = this.chart.chartData;
        "xy" != this.chart.chartType && (this.stackGraphs("smoothedLine"), this.stackGraphs("line"), this.stackGraphs("column"), this.stackGraphs("step"));
        this.recalculateToPercents && this.recalculate();
        this.synchronizationMultiplier && this.synchronizeWithAxis ? this.foundGraphs = !0 : (this.foundGraphs = !1, this.getMinMax())
    },
    draw: function () {
        AmCharts.ValueAxis.base.draw.call(this);
        var a = this.chart,
            b = this.set;
        "duration" == this.type && (this.duration = "ss");
        !0 === this.dataChanged && (this.updateData(), this.dataChanged = !1);
        if (this.logarithmic && (0 >= this.getMin(0, this.data.length - 1) || 0 >= this.minimum)) this.fire("logarithmicAxisFailed", {
                type: "logarithmicAxisFailed",
                chart: a
            });
        else {
                this.grid0 = null;
                var c, d, e = a.dx,
                    f = a.dy,
                    g = !1,
                    h = this.logarithmic,
                    k = a.chartType;
                if (isNaN(this.min) || isNaN(this.max) || !this.foundGraphs || Infinity == this.min || -Infinity == this.max) g = !0;
                else {
                        var l = this.labelFrequency,
                            m = this.showFirstLabel,
                            n = this.showLastLabel,
                            r = 1,
                            p = 0,
                            s = Math.round((this.max - this.min) / this.step) + 1,
                            q;
                        !0 === h ? (q = Math.log(this.max) * Math.LOG10E - Math.log(this.minReal) * Math.LOG10E, this.stepWidth = this.axisWidth / q, 2 < q && (s = Math.ceil(Math.log(this.max) * Math.LOG10E) + 1, p = Math.round(Math.log(this.minReal) * Math.LOG10E), s > this.gridCount && (r = Math.ceil(s / this.gridCount)))) : this.stepWidth = this.axisWidth / (this.max - this.min);
                        c = 0;
                        1 > this.step && -1 < this.step && (c = this.getDecimals(this.step));
                        this.integersOnly && (c = 0);
                        c > this.maxDecCount && (c = this.maxDecCount);
                        var t = this.precision;
                        isNaN(t) || (c = t);
                        this.max = AmCharts.roundTo(this.max, this.maxDecCount);
                        this.min = AmCharts.roundTo(this.min, this.maxDecCount);
                        var v = {};
                        v.precision = c;
                        v.decimalSeparator = a.numberFormatter.decimalSeparator;
                        v.thousandsSeparator = a.numberFormatter.thousandsSeparator;
                        this.numberFormatter = v;
                        var u, w = this.guides,
                            y = w.length;
                        if (0 < y) {
                                var x = this.fillAlpha;
                                for (d = this.fillAlpha = 0; d < y; d++) {
                                    var A = w[d],
                                        z = NaN,
                                        G = A.above;
                                    isNaN(A.toValue) || (z = this.getCoordinate(A.toValue), u = new this.axisItemRenderer(this, z, "", !0, NaN, NaN, A), this.pushAxisItem(u, G));
                                    var H = NaN;
                                    isNaN(A.value) || (H = this.getCoordinate(A.value), u = new this.axisItemRenderer(this, H, A.label, !0, NaN, (z - H) / 2, A), this.pushAxisItem(u, G));
                                    isNaN(z - H) || (u = new this.guideFillRenderer(this, H, z, A), this.pushAxisItem(u, G), u = u.graphics(), A.graphics = u, A.balloonText && this.addEventListeners(u, A))
                                }
                                this.fillAlpha = x
                            }
                        w = !1;
                        for (d = p; d < s; d += r) u = AmCharts.roundTo(this.step * d + this.min, c),
                        -1 != String(u).indexOf("e") && (w = !0, String(u).split("e"));
                        this.duration && (this.maxInterval = AmCharts.getMaxInterval(this.max, this.duration));
                        for (d = p; d < s; d += r) if (p = this.step * d + this.min, p = AmCharts.roundTo(p, this.maxDecCount + 1), !this.integersOnly || Math.round(p) == p) if (isNaN(t) || Number(AmCharts.toFixed(p, t)) == p) {
                                !0 === h && (0 === p && (p = this.minReal), 2 < q && (p = Math.pow(10, d)), w = -1 != String(p).indexOf("e") ? !0 : !1);
                                this.useScientificNotation && (w = !0);
                                this.usePrefixes && (w = !1);
                                w ? (u = -1 == String(p).indexOf("e") ? p.toExponential(15) : String(p), u = u.split("e"), c = Number(u[0]), u = Number(u[1]), c = AmCharts.roundTo(c, 14), 10 == c && (c = 1, u += 1), u = c + "e" + u, 0 === p && (u = "0"), 1 == p && (u = "1")) : (h && (c = String(p).split("."), v.precision = c[1] ? c[1].length : -1), u = this.usePrefixes ? AmCharts.addPrefix(p, a.prefixesOfBigNumbers, a.prefixesOfSmallNumbers, v, !0) : AmCharts.formatNumber(p, v, v.precision));
                                this.duration && (u = AmCharts.formatDuration(p, this.duration, "", this.durationUnits, this.maxInterval, v));
                                this.recalculateToPercents ? u += "%" : (c = this.unit) && (u = "left" == this.unitPosition ? c + u : u + c);
                                Math.round(d / l) != d / l && (u = void 0);
                                if (0 === d && !m || d == s - 1 && !n) u = " ";
                                c = this.getCoordinate(p);
                                this.labelFunction && (u = this.labelFunction(p, u, this));
                                u = new this.axisItemRenderer(this, c, u);
                                this.pushAxisItem(u);
                                if (p == this.baseValue && "radar" != k) {
                                    var O, I, y = this.viW,
                                        x = this.viH,
                                        p = this.viX;
                                    u = this.viY;
                                    "H" == this.orientation ? 0 <= c && c <= y + 1 && (O = [c, c, c + e], I = [x, 0, f]) : 0 <= c && c <= x + 1 && (O = [0, y, y + e], I = [c, c, c + f]);
                                    O && (c = AmCharts.fitToBounds(2 * this.gridAlpha, 0, 1), c = AmCharts.line(a.container, O, I, this.gridColor, c, 1, this.dashLength), c.translate(p, u), this.grid0 = c, a.axesSet.push(c), c.toBack())
                                }
                            }
                        d = this.baseValue;
                        this.min > this.baseValue && this.max > this.baseValue && (d = this.min);
                        this.min < this.baseValue && this.max < this.baseValue && (d = this.max);
                        h && d < this.minReal && (d = this.minReal);
                        this.baseCoord = this.getCoordinate(d);
                        a = {
                                type: "axisChanged",
                                target: this,
                                chart: a
                            };
                        a.min = h ? this.minReal : this.min;
                        a.max = this.max;
                        this.fire("axisChanged", a);
                        this.axisCreated = !0
                    }
                h = this.axisLine.set;
                a = this.labelsSet;
                this.positionTitle();
                "radar" != k ? (k = this.viX, d = this.viY, b.translate(k, d), a.translate(k, d)) : h.toFront();
                !this.visible || g ? (b.hide(), h.hide(), a.hide()) : (b.show(), h.show(), a.show())
            }
    },
    getDecimals: function (a) {
        var b = 0;
        isNaN(a) || (a = String(a), -1 != a.indexOf("e-") ? b = Number(a.split("-")[1]) : -1 != a.indexOf(".") && (b = a.split(".")[1].length));
        return b
    },
    stackGraphs: function (a) {
        var b = this.stackType;
        "stacked" == b && (b = "regular");
        "line" == b && (b = "none");
        "100% stacked" == b && (b = "100%");
        this.stackType = b;
        var c = [],
            d = [],
            e = [],
            f = [],
            g, h = this.chart.graphs,
            k, l, m, n, r = this.baseValue,
            p = !1;
        if ("line" == a || "step" == a || "smoothedLine" == a) p = !0;
        if (p && ("regular" == b || "100%" == b)) for (n = 0; n < h.length; n++) m = h[n],
        m.hidden || (l = m.type, m.chart == this.chart && (m.valueAxis == this && a == l && m.stackable) && (k && (m.stackGraph = k), k = m));
        for (k = this.start; k <= this.end; k++) {
                var s = 0;
                for (n = 0; n < h.length; n++) if (m = h[n], !m.hidden && (l = m.type, m.chart == this.chart && (m.valueAxis == this && a == l && m.stackable) && (l = this.data[k].axes[this.id].graphs[m.id], g = l.values.value, !isNaN(g)))) {
                    var q = this.getDecimals(g);
                    s < q && (s = q);
                    isNaN(f[k]) ? f[k] = Math.abs(g) : f[k] += Math.abs(g);
                    f[k] = AmCharts.roundTo(f[k], s);
                    m = m.fillToGraph;
                    p && m && (m = this.data[k].axes[this.id].graphs[m.id]) && (l.values.open = m.values.value);
                    "regular" == b && (p && (isNaN(c[k]) ? (c[k] = g, l.values.close = g, l.values.open = this.baseValue) : (isNaN(g) ? l.values.close = c[k] : l.values.close = g + c[k], l.values.open = c[k], c[k] = l.values.close)), "column" != a || isNaN(g) || (l.values.close = g, 0 > g ? (l.values.close = g, isNaN(d[k]) ? l.values.open = r : (l.values.close += d[k], l.values.open = d[k]), d[k] = l.values.close) : (l.values.close = g, isNaN(e[k]) ? l.values.open = r : (l.values.close += e[k], l.values.open = e[k]), e[k] = l.values.close)))
                }
            }
        for (k = this.start; k <= this.end; k++) for (n = 0; n < h.length; n++) m = h[n],
        m.hidden || (l = m.type, m.chart == this.chart && (m.valueAxis == this && a == l && m.stackable) && (l = this.data[k].axes[this.id].graphs[m.id], g = l.values.value, isNaN(g) || (c = 100 * (g / f[k]), l.values.percents = c, l.values.total = f[k], "100%" == b && (isNaN(d[k]) && (d[k] = 0), isNaN(e[k]) && (e[k] = 0), 0 > c ? (l.values.close = AmCharts.fitToBounds(c + d[k], -100, 100), l.values.open = d[k], d[k] = l.values.close) : (l.values.close = AmCharts.fitToBounds(c + e[k], -100, 100), l.values.open = e[k], e[k] = l.values.close)))))
    },
    recalculate: function () {
        var a = this.chart.graphs,
            b;
        for (b = 0; b < a.length; b++) {
                var c = a[b];
                if (c.valueAxis == this) {
                    var d = "value";
                    if ("candlestick" == c.type || "ohlc" == c.type) d = "open";
                    var e, f, g = this.end + 2,
                        g = AmCharts.fitToBounds(this.end + 1, 0, this.data.length - 1),
                        h = this.start;
                    0 < h && h--;
                    var k;
                    for (k = this.start; k <= g && (f = this.data[k].axes[this.id].graphs[c.id], e = f.values[d], isNaN(e)); k++);
                    for (d = h; d <= g; d++) {
                            f = this.data[d].axes[this.id].graphs[c.id];
                            f.percents = {};
                            var h = f.values,
                                l;
                            for (l in h) f.percents[l] = "percents" != l ? 100 * (h[l] / e) - 100 : h[l]
                        }
                }
            }
    },
    getMinMax: function () {
        var a = !1,
            b = this.chart,
            c = b.graphs,
            d;
        for (d = 0; d < c.length; d++) {
                var e = c[d].type;
                ("line" == e || "step" == e || "smoothedLine" == e) && this.expandMinMax && (a = !0)
            }
        a && (0 < this.start && this.start--, this.end < this.data.length - 1 && this.end++);
        "serial" == b.chartType && (!0 !== b.categoryAxis.parseDates || a || this.end < this.data.length - 1 && this.end++);
        a = this.minMaxMultiplier;
        this.min = this.getMin(this.start, this.end);
        this.max =
        this.getMax();
        a = (this.max - this.min) * (a - 1);
        this.min -= a;
        this.max += a;
        a = this.guides.length;
        if (this.includeGuidesInMinMax && 0 < a) for (b = 0; b < a; b++) c = this.guides[b],
        c.toValue < this.min && (this.min = c.toValue),
        c.value < this.min && (this.min = c.value),
        c.toValue > this.max && (this.max = c.toValue),
        c.value > this.max && (this.max = c.value);
        isNaN(this.minimum) || (this.min = this.minimum);
        isNaN(this.maximum) || (this.max = this.maximum);
        this.min > this.max && (a = this.max, this.max = this.min, this.min = a);
        isNaN(this.minTemp) || (this.min = this.minTemp);
        isNaN(this.maxTemp) || (this.max = this.maxTemp);
        this.minReal = this.min;
        this.maxReal = this.max;
        0 === this.min && 0 === this.max && (this.max = 9);
        this.min > this.max && (this.min = this.max - 1);
        a = this.min;
        b = this.max;
        c = this.max - this.min;
        d = 0 === c ? Math.pow(10, Math.floor(Math.log(Math.abs(this.max)) * Math.LOG10E)) / 10 : Math.pow(10, Math.floor(Math.log(Math.abs(c)) * Math.LOG10E)) / 10;
        isNaN(this.maximum) && isNaN(this.maxTemp) && (this.max = Math.ceil(this.max / d) * d + d);
        isNaN(this.minimum) && isNaN(this.minTemp) && (this.min = Math.floor(this.min / d) * d - d);
        0 > this.min && 0 <= a && (this.min = 0);
        0 < this.max && 0 >= b && (this.max = 0);
        "100%" == this.stackType && (this.min = 0 > this.min ? -100 : 0, this.max = 0 > this.max ? 0 : 100);
        c = this.max - this.min;
        d = Math.pow(10, Math.floor(Math.log(Math.abs(c)) * Math.LOG10E)) / 10;
        this.step = Math.ceil(c / this.gridCount / d) * d;
        c = Math.pow(10, Math.floor(Math.log(Math.abs(this.step)) * Math.LOG10E));
        c = c.toExponential(0).split("e");
        d = Number(c[1]);
        9 == Number(c[0]) && d++;
        c = this.generateNumber(1, d);
        d = Math.ceil(this.step / c);
        5 < d && (d = 10);
        5 >= d && 2 < d && (d = 5);
        this.step =
        Math.ceil(this.step / (c * d)) * c * d;
        1 > c ? (this.maxDecCount = Math.abs(Math.log(Math.abs(c)) * Math.LOG10E), this.maxDecCount = Math.round(this.maxDecCount), this.step = AmCharts.roundTo(this.step, this.maxDecCount + 1)) : this.maxDecCount = 0;
        this.min = this.step * Math.floor(this.min / this.step);
        this.max = this.step * Math.ceil(this.max / this.step);
        0 > this.min && 0 <= a && (this.min = 0);
        0 < this.max && 0 >= b && (this.max = 0);
        1 < this.minReal && 1 < this.max - this.minReal && (this.minReal = Math.floor(this.minReal));
        c = Math.pow(10, Math.floor(Math.log(Math.abs(this.minReal)) * Math.LOG10E));
        0 === this.min && (this.minReal = c);
        0 === this.min && 1 < this.minReal && (this.minReal = 1);
        0 < this.min && 0 < this.minReal - this.step && (this.minReal = this.min + this.step < this.minReal ? this.min + this.step : this.min);
        c = Math.log(b) * Math.LOG10E - Math.log(a) * Math.LOG10E;
        this.logarithmic && (2 < c ? (this.minReal = this.min = Math.pow(10, Math.floor(Math.log(Math.abs(a)) * Math.LOG10E)), this.max = Math.pow(10, Math.ceil(Math.log(Math.abs(b)) * Math.LOG10E))) : (b = Math.pow(10, Math.floor(Math.log(Math.abs(this.min)) * Math.LOG10E)) / 10, a =
            Math.pow(10, Math.floor(Math.log(Math.abs(a)) * Math.LOG10E)) / 10, b < a && (this.minReal = this.min = 10 * a)))
    },
    generateNumber: function (a, b) {
        var c = "",
            d;
        d = 0 > b ? Math.abs(b) - 1 : Math.abs(b);
        var e;
        for (e = 0; e < d; e++) c += "0";
        return 0 > b ? Number("0." + c + String(a)) : Number(String(a) + c)
    },
    getMin: function (a, b) {
        var c, d;
        for (d = a; d <= b; d++) {
            var e = this.data[d].axes[this.id].graphs,
                f;
            for (f in e) if (e.hasOwnProperty(f)) {
                    var g = this.chart.getGraphById(f);
                    if (g.includeInMinMax && (!g.hidden || this.includeHidden)) {
                        isNaN(c) && (c = Infinity);
                        this.foundGraphs = !0;
                        g = e[f].values;
                        this.recalculateToPercents && (g = e[f].percents);
                        var h;
                        if (this.minMaxField) h = g[this.minMaxField],
                        h < c && (c = h);
                        else for (var k in g) g.hasOwnProperty(k) && ("percents" != k && "total" != k) && (h = g[k], h < c && (c = h))
                    }
                }
        }
        return c
    },
    getMax: function () {
        var a, b;
        for (b = this.start; b <= this.end; b++) {
            var c = this.data[b].axes[this.id].graphs,
                d;
            for (d in c) if (c.hasOwnProperty(d)) {
                    var e = this.chart.getGraphById(d);
                    if (e.includeInMinMax && (!e.hidden || this.includeHidden)) {
                        isNaN(a) && (a = -Infinity);
                        this.foundGraphs = !0;
                        e = c[d].values;
                        this.recalculateToPercents && (e = c[d].percents);
                        var f;
                        if (this.minMaxField) f = e[this.minMaxField],
                        f > a && (a = f);
                        else for (var g in e) e.hasOwnProperty(g) && ("percents" != g && "total" != g) && (f = e[g], f > a && (a = f))
                    }
                }
        }
        return a
    },
    dispatchZoomEvent: function (a, b) {
        var c = {
            type: "axisZoomed",
            startValue: a,
            endValue: b,
            target: this,
            chart: this.chart
        };
        this.fire(c.type, c)
    },
    zoomToValues: function (a, b) {
        if (b < a) {
            var c = b;
            b = a;
            a = c
        }
        a < this.min && (a = this.min);
        b > this.max && (b = this.max);
        c = {
            type: "axisSelfZoomed"
        };
        c.chart = this.chart;
        c.valueAxis = this;
        c.multiplier = this.axisWidth / Math.abs(this.getCoordinate(b) - this.getCoordinate(a));
        c.position = "V" == this.orientation ? this.reversed ? this.getCoordinate(a) : this.getCoordinate(b) : this.reversed ? this.getCoordinate(b) : this.getCoordinate(a);
        this.fire(c.type, c)
    },
    coordinateToValue: function (a) {
        if (isNaN(a)) return NaN;
        var b = this.axisWidth,
            c = this.stepWidth,
            d = this.reversed,
            e = this.rotate,
            f = this.min,
            g = this.minReal;
        return !0 === this.logarithmic ? Math.pow(10, (e ? !0 === d ? (b - a) / c : a / c : !0 === d ? a / c : (b - a) / c) + Math.log(g) * Math.LOG10E) : !0 === d ? e ? f - (a - b) / c : a / c + f : e ? a / c + f : f - (a - b) / c
    },
    getCoordinate: function (a) {
        if (isNaN(a)) return NaN;
        var b = this.rotate,
            c = this.reversed,
            d = this.axisWidth,
            e = this.stepWidth,
            f = this.min,
            g = this.minReal;
        !0 === this.logarithmic ? (a = Math.log(a) * Math.LOG10E - Math.log(g) * Math.LOG10E, b = b ? !0 === c ? d - e * a : e * a : !0 === c ? e * a : d - e * a) : b = !0 === c ? b ? d - e * (a - f) : e * (a - f) : b ? e * (a - f) : d - e * (a - f);
        b = this.rotate ? b + (this.x - this.viX) : b + (this.y - this.viY);
        return Math.round(b)
    },
    synchronizeWithAxis: function (a) {
        this.synchronizeWithAxis = a;
        this.removeListener(this.synchronizeWithAxis, "axisChanged", this.handleSynchronization);
        this.listenTo(this.synchronizeWithAxis, "axisChanged", this.handleSynchronization)
    },
    handleSynchronization: function (a) {
        var b = this.synchronizeWithAxis;
        a = b.min;
        var c = b.max,
            b = b.step,
            d = this.synchronizationMultiplier;
        d && (this.min = a * d, this.max = c * d, this.step = b * d, a = Math.pow(10, Math.floor(Math.log(Math.abs(this.step)) * Math.LOG10E)), a = Math.abs(Math.log(Math.abs(a)) * Math.LOG10E), this.maxDecCount = a = Math.round(a), this.draw())
    }
});
AmCharts.CategoryAxis = AmCharts.Class({
    inherits: AmCharts.AxisBase,
    construct: function () {
        AmCharts.CategoryAxis.base.construct.call(this);
        this.minPeriod = "DD";
        this.equalSpacing = this.parseDates = !1;
        this.position = "bottom";
        this.startOnAxis = !1;
        this.firstDayOfWeek = 1;
        this.gridPosition = "middle";
        this.markPeriodChange = this.boldPeriodBeginning = !0;
        this.safeDistance = 30;
        this.centerLabelOnFullPeriod = !0;
        this.periods = [{
            period: "ss",
            count: 1
        },
        {
            period: "ss",
            count: 5
        },
        {
            period: "ss",
            count: 10
        },
        {
            period: "ss",
            count: 30
        },
        {
            period: "mm",
            count: 1
        },
        {
            period: "mm",
            count: 5
        },
        {
            period: "mm",
            count: 10
        },
        {
            period: "mm",
            count: 30
        },
        {
            period: "hh",
            count: 1
        },
        {
            period: "hh",
            count: 3
        },
        {
            period: "hh",
            count: 6
        },
        {
            period: "hh",
            count: 12
        },
        {
            period: "DD",
            count: 1
        },
        {
            period: "DD",
            count: 2
        },
        {
            period: "DD",
            count: 3
        },
        {
            period: "DD",
            count: 4
        },
        {
            period: "DD",
            count: 5
        },
        {
            period: "WW",
            count: 1
        },
        {
            period: "MM",
            count: 1
        },
        {
            period: "MM",
            count: 2
        },
        {
            period: "MM",
            count: 3
        },
        {
            period: "MM",
            count: 6
        },
        {
            period: "YYYY",
            count: 1
        },
        {
            period: "YYYY",
            count: 2
        },
        {
            period: "YYYY",
            count: 5
        },
        {
            period: "YYYY",
            count: 10
        },
        {
            period: "YYYY",
            count: 50
        },
        {
            period: "YYYY",
            count: 100
        }];
        this.dateFormats = [{
            period: "fff",
            format: "JJ:NN:SS"
        },
        {
            period: "ss",
            format: "JJ:NN:SS"
        },
        {
            period: "mm",
            format: "JJ:NN"
        },
        {
            period: "hh",
            format: "JJ:NN"
        },
        {
            period: "DD",
            format: "MMM DD"
        },
        {
            period: "WW",
            format: "MMM DD"
        },
        {
            period: "MM",
            format: "MMM"
        },
        {
            period: "YYYY",
            format: "YYYY"
        }];
        this.nextPeriod = {};
        this.nextPeriod.fff = "ss";
        this.nextPeriod.ss = "mm";
        this.nextPeriod.mm = "hh";
        this.nextPeriod.hh = "DD";
        this.nextPeriod.DD = "MM";
        this.nextPeriod.MM = "YYYY"
    },
    draw: function () {
        AmCharts.CategoryAxis.base.draw.call(this);
        this.generateDFObject();
        var a = this.chart.chartData;
        this.data = a;
        if (AmCharts.ifArray(a)) {
            var b, c = this.chart,
                d = this.start,
                e = this.labelFrequency,
                f = 0;
            b = this.end - d + 1;
            var g = this.gridCount,
                h = this.showFirstLabel,
                k = this.showLastLabel,
                l, m = "",
                m = AmCharts.extractPeriod(this.minPeriod);
            l = AmCharts.getPeriodDuration(m.period, m.count);
            var n, r, p, s, q;
            n = this.rotate;
            var t = this.firstDayOfWeek,
                v = this.boldPeriodBeginning,
                a = AmCharts.resetDateToMin(new Date(a[a.length - 1].time + 1.05 * l), this.minPeriod, 1, t).getTime(),
                u;
            this.endTime > a && (this.endTime = a);
            if (this.parseDates && !this.equalSpacing) {
                    this.timeDifference = this.endTime - this.startTime;
                    d = this.choosePeriod(0);
                    e = d.period;
                    n = d.count;
                    r = AmCharts.getPeriodDuration(e, n);
                    r < l && (e = m.period, n = m.count, r = l);
                    p = e;
                    "WW" == p && (p = "DD");
                    this.stepWidth = this.getStepWidth(this.timeDifference);
                    var g = Math.ceil(this.timeDifference / r) + 1,
                        w = m = AmCharts.resetDateToMin(new Date(this.startTime - r), e, n, t).getTime();
                    p == e && (1 == n && this.centerLabelOnFullPeriod) && (s = r * this.stepWidth);
                    this.cellWidth = l * this.stepWidth;
                    b = Math.round(m / r);
                    d = -1;
                    b / 2 == Math.round(b / 2) && (d = -2, m -= r);
                    var y = c.firstTime;
                    if (0 < this.gridCount) for (b = d; b <= g; b++) {
                            a = y + r * (b + 0.1 + Math.floor((w - y) / r));
                            a = AmCharts.resetDateToMin(new Date(a), e, n, t).getTime();
                            l = (a - this.startTime) * this.stepWidth;
                            q = !1;
                            this.nextPeriod[p] && (q = this.checkPeriodChange(this.nextPeriod[p], 1, a, m));
                            u = !1;
                            q && this.markPeriodChange ? (m = this.dateFormatsObject[this.nextPeriod[p]], u = !0) : m = this.dateFormatsObject[p];
                            v || (u = !1);
                            m = AmCharts.formatDate(new Date(a), m);
                            if (b == d && !h || b == g && !k) m = " ";
                            this.labelFunction && (m = this.labelFunction(m, new Date(a), this));
                            m = new this.axisItemRenderer(this, l, m, !1, s, 0, !1, u);
                            this.pushAxisItem(m);
                            m = a
                        }
                } else if (!this.parseDates) {
                    if (this.cellWidth = this.getStepWidth(b), b < g && (g = b), f += this.start, this.stepWidth = this.getStepWidth(b), 0 < g) for (v = Math.floor(b / g), l = f, l / 2 == Math.round(l / 2) && l--, 0 > l && (l = 0), g = 0, b = l; b <= this.end + 2; b++) if (0 <= b && b < this.data.length ? (p = this.data[b], m = p.category) : m = "", b / v == Math.round(b / v) || p.forceShow) {
                        l = this.getCoordinate(b - f);
                        t = 0;
                        "start" == this.gridPosition && (l -= this.cellWidth / 2, t = this.cellWidth / 2);
                        if (b == d && !h || b == this.end && !k) m = void 0;
                        Math.round(g / e) != g / e && (m = void 0);
                        g++;
                        s = this.cellWidth;
                        n && (s = NaN);
                        this.labelFunction && (m = this.labelFunction(m, p, this));
                        m = AmCharts.fixNewLines(m);
                        m = new this.axisItemRenderer(this, l, m, !0, s, t, void 0, !1, t);
                        this.pushAxisItem(m)
                    }
                } else if (this.parseDates && this.equalSpacing) {
                    f = this.start;
                    this.startTime = this.data[this.start].time;
                    this.endTime = this.data[this.end].time;
                    this.timeDifference = this.endTime - this.startTime;
                    d = this.choosePeriod(0);
                    e = d.period;
                    n = d.count;
                    r = AmCharts.getPeriodDuration(e, n);
                    r < l && (e = m.period, n = m.count, r = l);
                    p = e;
                    "WW" == p && (p = "DD");
                    this.stepWidth = this.getStepWidth(b);
                    g = Math.ceil(this.timeDifference / r) + 1;
                    m = AmCharts.resetDateToMin(new Date(this.startTime - r), e, n, t).getTime();
                    this.cellWidth = this.getStepWidth(b);
                    b = Math.round(m / r);
                    d = -1;
                    b / 2 == Math.round(b / 2) && (d = -2, m -= r);
                    l = this.start;
                    l / 2 == Math.round(l / 2) && l--;
                    0 > l && (l = 0);
                    s = this.end + 2;
                    s >= this.data.length && (s = this.data.length);
                    r = !1;
                    r = !h;
                    this.previousPos = -1E3;
                    20 < this.labelRotation && (this.safeDistance = 5);
                    if (this.data[l].time != AmCharts.resetDateToMin(new Date(this.data[l].time), e, n, t).getTime()) for (t = 0, w = m, b = l; b < s; b++) a = this.data[b].time,
                    this.checkPeriodChange(e, n, a, w) && (t++, 2 <= t && (l = b, b = s), w = a);
                    for (b = l; b < s; b++) if (a = this.data[b].time, this.checkPeriodChange(e, n, a, m)) {
                        l = this.getCoordinate(b - this.start);
                        q = !1;
                        this.nextPeriod[p] && (q = this.checkPeriodChange(this.nextPeriod[p], 1, a, m));
                        u = !1;
                        q && this.markPeriodChange ? (m = this.dateFormatsObject[this.nextPeriod[p]], u = !0) : m = this.dateFormatsObject[p];
                        m = AmCharts.formatDate(new Date(a), m);
                        if (b == d && !h || b == g && !k) m = " ";
                        r ? r = !1 : (v || (u = !1), l - this.previousPos > this.safeDistance * Math.cos(this.labelRotation * Math.PI / 180) && (this.labelFunction && (m = this.labelFunction(m, new Date(a), this)), m = new this.axisItemRenderer(this, l, m, void 0, void 0, void 0, void 0, u), t = m.graphics(), this.pushAxisItem(m), this.previousPos = l + t.getBBox().width));
                        m = a
                    }
                }
            for (b = 0; b < this.data.length; b++) if (h = this.data[b]) k = this.parseDates && !this.equalSpacing ? Math.round((h.time - this.startTime) * this.stepWidth + this.cellWidth / 2) : this.getCoordinate(b - f),
            h.x[this.id] = k;
            h = this.guides.length;
            for (b = 0; b < h; b++) k = this.guides[b],
            t = t = t = g = v = NaN,
            d = k.above,
            k.toCategory && (t = c.getCategoryIndexByValue(k.toCategory), isNaN(t) || (v = this.getCoordinate(t - f), m = new this.axisItemRenderer(this, v, "", !0, NaN, NaN, k), this.pushAxisItem(m, d))),
            k.category && (t = c.getCategoryIndexByValue(k.category), isNaN(t) || (g = this.getCoordinate(t - f), t = (v - g) / 2, m = new this.axisItemRenderer(this, g, k.label, !0, NaN, t, k), this.pushAxisItem(m, d))),
            k.toDate && (this.equalSpacing ? (t = c.getClosestIndex(this.data, "time", k.toDate.getTime(), !1, 0, this.data.length - 1), isNaN(t) || (v = this.getCoordinate(t - f))) : v = (k.toDate.getTime() - this.startTime) * this.stepWidth, m = new this.axisItemRenderer(this, v, "", !0, NaN, NaN, k), this.pushAxisItem(m, d)),
            k.date && (this.equalSpacing ? (t = c.getClosestIndex(this.data, "time", k.date.getTime(), !1, 0, this.data.length - 1), isNaN(t) || (g = this.getCoordinate(t - f))) : g = (k.date.getTime() - this.startTime) * this.stepWidth, t = (v - g) / 2, m = "H" == this.orientation ? new this.axisItemRenderer(this, g, k.label, !1, 2 * t, NaN, k) : new this.axisItemRenderer(this, g, k.label, !1, NaN, t, k), this.pushAxisItem(m, d)),
            v = new this.guideFillRenderer(this, g, v, k),
            g = v.graphics(),
            this.pushAxisItem(v, d),
            k.graphics = g,
            g.index = b,
            k.balloonText && this.addEventListeners(g, k)
        }
        this.axisCreated = !0;
        c = this.x;
        f = this.y;
        this.set.translate(c, f);
        this.labelsSet.translate(c, f);
        this.positionTitle();
        (c = this.axisLine.set) && c.toFront()
    },
    choosePeriod: function (a) {
        var b = AmCharts.getPeriodDuration(this.periods[a].period, this.periods[a].count),
            c =
        Math.ceil(this.timeDifference / b),
            d = this.periods;
        return this.timeDifference < b && 0 < a ? d[a - 1] : c <= this.gridCount ? d[a] : a + 1 < d.length ? this.choosePeriod(a + 1) : d[a]
    },
    getStepWidth: function (a) {
        var b;
        this.startOnAxis ? (b = this.axisWidth / (a - 1), 1 == a && (b = this.axisWidth)) : b = this.axisWidth / a;
        return b
    },
    getCoordinate: function (a) {
        a *= this.stepWidth;
        this.startOnAxis || (a += this.stepWidth / 2);
        return Math.round(a)
    },
    timeZoom: function (a, b) {
        this.startTime = a;
        this.endTime = b
    },
    minDuration: function () {
        var a = AmCharts.extractPeriod(this.minPeriod);
        return AmCharts.getPeriodDuration(a.period, a.count)
    },
    checkPeriodChange: function (a, b, c, d) {
        c = new Date(c);
        var e = new Date(d),
            f = this.firstDayOfWeek;
        d = b;
        "DD" == a && (b = 1);
        c = AmCharts.resetDateToMin(c, a, b, f).getTime();
        b = AmCharts.resetDateToMin(e, a, b, f).getTime();
        return "DD" == a && c - b <= AmCharts.getPeriodDuration(a, d) ? !1 : c != b ? !0 : !1
    },
    generateDFObject: function () {
        this.dateFormatsObject = {};
        var a;
        for (a = 0; a < this.dateFormats.length; a++) {
            var b = this.dateFormats[a];
            this.dateFormatsObject[b.period] = b.format
        }
    },
    xToIndex: function (a) {
        var b =
        this.data,
            c = this.chart,
            d = c.rotate,
            e = this.stepWidth;
        this.parseDates && !this.equalSpacing ? (a = this.startTime + Math.round(a / e) - this.minDuration() / 2, c = c.getClosestIndex(b, "time", a, !1, this.start, this.end + 1)) : (this.startOnAxis || (a -= e / 2), c = this.start + Math.round(a / e));
        var c = AmCharts.fitToBounds(c, 0, b.length - 1),
            f;
        b[c] && (f = b[c].x[this.id]);
        d ? f > this.height + 1 && c-- : f > this.width + 1 && c--;
        0 > f && c++;
        return c = AmCharts.fitToBounds(c, 0, b.length - 1)
    },
    dateToCoordinate: function (a) {
        return this.parseDates && !this.equalSpacing ? (a.getTime() - this.startTime) * this.stepWidth : this.parseDates && this.equalSpacing ? (a = this.chart.getClosestIndex(this.data, "time", a.getTime(), !1, 0, this.data.length - 1), this.getCoordinate(a - this.start)) : NaN
    },
    categoryToCoordinate: function (a) {
        return this.chart ? (a = this.chart.getCategoryIndexByValue(a), this.getCoordinate(a - this.start)) : NaN
    },
    coordinateToDate: function (a) {
        return this.equalSpacing ? (a = this.xToIndex(a), new Date(this.data[a].time)) : new Date(this.startTime + a / this.stepWidth)
    }
});
AmCharts.RecAxis = AmCharts.Class({
    construct: function (a) {
        var b = a.chart,
            c = a.axisThickness,
            d = a.axisColor,
            e = a.axisAlpha,
            f = a.offset,
            g = a.dx,
            h = a.dy,
            k = a.viX,
            l = a.viY,
            m = a.viH,
            n = a.viW,
            r = b.container;
        "H" == a.orientation ? (d = AmCharts.line(r, [0, n], [0, 0], d, e, c), this.axisWidth = a.width, "bottom" == a.position ? (a = c / 2 + f + m + l - 1, c = k) : (a = -c / 2 - f + l + h, c = g + k)) : (this.axisWidth = a.height, "right" == a.position ? (d = AmCharts.line(r, [0, 0, -g], [0, m, m - h], d, e, c), a = l + h, c = c / 2 + f + g + n + k - 1) : (d = AmCharts.line(r, [0, 0], [0, m], d, e, c), a = l, c = -c / 2 - f + k));
        d.translate(c, a);
        b.axesSet.push(d);
        this.set = d
    }
});
AmCharts.RecItem = AmCharts.Class({
    construct: function (a, b, c, d, e, f, g, h, k) {
        b = Math.round(b);
        void 0 == c && (c = "");
        k || (k = 0);
        void 0 == d && (d = !0);
        var l = a.chart.fontFamily,
            m = a.fontSize;
        void 0 == m && (m = a.chart.fontSize);
        var n = a.color;
        void 0 == n && (n = a.chart.color);
        var r = a.chart.container,
            p = r.set();
        this.set = p;
        var s = a.axisThickness,
            q = a.axisColor,
            t = a.axisAlpha,
            v = a.tickLength,
            u = a.gridAlpha,
            w = a.gridThickness,
            y = a.gridColor,
            x = a.dashLength,
            A = a.fillColor,
            z = a.fillAlpha,
            G = a.labelsEnabled,
            H = a.labelRotation,
            O = a.counter,
            I = a.inside,
            W = a.dx,
            U = a.dy,
            sa = a.orientation,
            R = a.position,
            T = a.previousCoord,
            P = a.viH,
            la = a.viW,
            da = a.offset,
            ea, fa;
        g ? (G = !0, isNaN(g.tickLength) || (v = g.tickLength), void 0 != g.lineColor && (y = g.lineColor), void 0 != g.color && (n = g.color), isNaN(g.lineAlpha) || (u = g.lineAlpha), isNaN(g.dashLength) || (x = g.dashLength), isNaN(g.lineThickness) || (w = g.lineThickness), !0 === g.inside && (I = !0), isNaN(g.labelRotation) || (H = g.labelRotation), isNaN(g.fontSize) || (m = g.fontSize), g.position && (R = g.position)) : "" === c && (v = 0);
        fa = "start";
        e && (fa = "middle");
        var X =
        H * Math.PI / 180,
            V, F = 0,
            E = 0,
            $ = 0,
            B = V = 0;
        "V" == sa && (H = 0);
        var Y;
        G && (Y = AmCharts.text(r, c, n, l, m, fa, h), B = Y.getBBox().width);
        if ("H" == sa) {
                if (0 <= b && b <= la + 1 && (0 < v && (0 < t && b + k <= la + 1) && (ea = AmCharts.line(r, [b + k, b + k], [0, v], q, t, w), p.push(ea)), 0 < u && (fa = AmCharts.line(r, [b, b + W, b + W], [P, P + U, U], y, u, w, x), p.push(fa))), E = 0, F = b, g && 90 == H && (F -= m), !1 === d ? (fa = "start", E = "bottom" == R ? I ? E + v : E - v : I ? E - v : E + v, F += 3, e && (F += e / 2, fa = "middle"), 0 < H && (fa = "middle")) : fa = "middle", 1 == O && (0 < z && !g && T < la) && (d = AmCharts.fitToBounds(b, 0, la), T = AmCharts.fitToBounds(T, 0, la), V = d - T, 0 < V && (fill = AmCharts.rect(r, V, a.height, A, z), fill.translate(d - V + W, U), p.push(fill))), "bottom" == R ? (E += P + m / 2 + da, I ? 0 < H ? (E = P - B / 2 * Math.sin(X) - v - 3, F += B / 2 * Math.cos(X)) : E -= v + m + 3 + 3 : 0 < H ? (E = P + B / 2 * Math.sin(X) + v + 3, F -= B / 2 * Math.cos(X)) : E += v + s + 3 + 3) : (E += U + m / 2 - da, F += W, I ? 0 < H ? (E = B / 2 * Math.sin(X) + v + 3, F -= B / 2 * Math.cos(X)) : E += v + 3 : 0 < H ? (E = -(B / 2) * Math.sin(X) - v - 6, F += B / 2 * Math.cos(X)) : E -= v + m + 3 + s + 3), "bottom" == R ? V = (I ? P - v - 1 : P + s - 1) + da : ($ = W, V = (I ? U : U - v - s + 1) - da), f && (F += f), U = F, 0 < H && (U += B / 2 * Math.cos(X)), Y && (R = 0, I && (R = B / 2 * Math.cos(X)), U + R > la + 2 || 0 > U)) Y.remove(),
                Y = null
            } else {
                0 <= b && b <= P + 1 && (0 < v && (0 < t && b + k <= P + 1) && (ea = AmCharts.line(r, [0, v], [b + k, b + k], q, t, w), p.push(ea)), 0 < u && (fa = AmCharts.line(r, [0, W, la + W], [b, b + U, b + U], y, u, w, x), p.push(fa)));
                fa = "end";
                if (!0 === I && "left" == R || !1 === I && "right" == R) fa = "start";
                E = b - m / 2;
                1 == O && (0 < z && !g) && (d = AmCharts.fitToBounds(b, 0, P), T = AmCharts.fitToBounds(T, 0, P), X = d - T, fill = AmCharts.polygon(r, [0, a.width, a.width, 0], [0, 0, X, X], A, z), fill.translate(W, d - X + U), p.push(fill));
                E += m / 2;
                "right" == R ? (F += W + la + da, E += U, I ? (F -= v + 4, f || (E -= m / 2 + 3)) : (F += v + 4 + s, E -= 2)) : I ? (F += v + 4 - da, f || (E -= m / 2 + 3), g && (F += W, E += U)) : (F += -v - s - 4 - 2 - da, E -= 2);
                ea && ("right" == R ? ($ += W + da + la, V += U, $ = I ? $ - s : $ + s) : ($ -= da, I || ($ -= v + s)));
                f && (E += f);
                I = -3;
                "right" == R && (I += U);
                Y && (E > P + 1 || E < I) && (Y.remove(), Y = null)
            }
        ea && ea.translate($, V);
        !1 === a.visible && (ea && ea.remove(), Y && (Y.remove(), Y = null));
        Y && (Y.attr({
                "text-anchor": fa
            }), Y.translate(F, E), 0 !== H && Y.rotate(-H), a.allLabels.push(Y), " " != c && (this.label = Y));
        a.counter = 0 === O ? 1 : 0;
        a.previousCoord = b;
        0 === this.set.node.childNodes.length && this.set.remove()
    },
    graphics: function () {
        return this.set
    },
    getLabel: function () {
        return this.label
    }
});
AmCharts.RecFill = AmCharts.Class({
    construct: function (a, b, c, d) {
        var e = a.dx,
            f = a.dy,
            g = a.orientation,
            h = 0;
        if (c < b) {
                var k = b;
                b = c;
                c = k
            }
        var l = d.fillAlpha;
        isNaN(l) && (l = 0);
        k = a.chart.container;
        d = d.fillColor;
        "V" == g ? (b = AmCharts.fitToBounds(b, 0, a.viH), c = AmCharts.fitToBounds(c, 0, a.viH)) : (b = AmCharts.fitToBounds(b, 0, a.viW), c = AmCharts.fitToBounds(c, 0, a.viW));
        c -= b;
        isNaN(c) && (c = 4, h = 2, l = 0);
        0 > c && "object" == typeof d && (d = d.join(",").split(",").reverse());
        "V" == g ? (a = AmCharts.rect(k, a.width, c, d, l), a.translate(e, b - h + f)) : (a = AmCharts.rect(k, c, a.height, d, l), a.translate(b - h + e, f));
        this.set = k.set([a])
    },
    graphics: function () {
        return this.set
    },
    getLabel: function () {}
});
AmCharts.RadAxis = AmCharts.Class({
    construct: function (a) {
        var b = a.chart,
            c = a.axisThickness,
            d = a.axisColor,
            e = a.axisAlpha,
            f = a.x,
            g = a.y;
        this.set = b.container.set();
        b.axesSet.push(this.set);
        var h = a.axisTitleOffset,
            k = a.radarCategoriesEnabled,
            l = a.chart.fontFamily,
            m = a.fontSize;
        void 0 === m && (m = a.chart.fontSize);
        var n = a.color;
        void 0 === n && (n = a.chart.color);
        if (b) {
                this.axisWidth = a.height;
                a = b.chartData;
                var r = a.length,
                    p;
                for (p = 0; p < r; p++) {
                        var s = 180 - 360 / r * p,
                            q = f + this.axisWidth * Math.sin(s / 180 * Math.PI),
                            t = g + this.axisWidth * Math.cos(s / 180 * Math.PI);
                        0 < e && (q = AmCharts.line(b.container, [f, q], [g, t], d, e, c), this.set.push(q));
                        if (k) {
                                var v = "start",
                                    q = f + (this.axisWidth + h) * Math.sin(s / 180 * Math.PI),
                                    t = g + (this.axisWidth + h) * Math.cos(s / 180 * Math.PI);
                                if (180 == s || 0 === s) v = "middle",
                                q -= 5;
                                0 > s && (v = "end", q -= 10);
                                180 == s && (t -= 5);
                                0 === s && (t += 5);
                                s = AmCharts.text(b.container, a[p].category, n, l, m, v);
                                s.translate(q + 5, t);
                                this.set.push(s);
                                s.getBBox()
                            }
                    }
            }
    }
});
AmCharts.RadItem = AmCharts.Class({
    construct: function (a, b, c, d, e, f, g) {
        void 0 === c && (c = "");
        var h = a.chart.fontFamily,
            k = a.fontSize;
        void 0 === k && (k = a.chart.fontSize);
        var l = a.color;
        void 0 === l && (l = a.chart.color);
        var m = a.chart.container;
        this.set = d = m.set();
        var n = a.axisColor,
            r = a.axisAlpha,
            p = a.tickLength,
            s = a.gridAlpha,
            q = a.gridThickness,
            t = a.gridColor,
            v = a.dashLength,
            u = a.fillColor,
            w = a.fillAlpha,
            y = a.labelsEnabled;
        e = a.counter;
        var x = a.inside,
            A = a.gridType,
            z;
        b -= a.height;
        var G;
        f = a.x;
        var H = a.y;
        g ? (y = !0, isNaN(g.tickLength) || (p = g.tickLength), void 0 != g.lineColor && (t = g.lineColor), isNaN(g.lineAlpha) || (s = g.lineAlpha), isNaN(g.dashLength) || (v = g.dashLength), isNaN(g.lineThickness) || (q = g.lineThickness), !0 === g.inside && (x = !0)) : c || (s /= 3, p /= 2);
        var O = "end",
            I = -1;
        x && (O = "start", I = 1);
        var W;
        y && (W = AmCharts.text(m, c, l, h, k, O), W.translate(f + (p + 3) * I, b), d.push(W), this.label = W, G = AmCharts.line(m, [f, f + p * I], [b, b], n, r, q), d.push(G));
        b = a.y - b;
        c = [];
        h = [];
        if (0 < s) {
                if ("polygons" == A) {
                    z = a.data.length;
                    for (k = 0; k < z; k++) l = 180 - 360 / z * k,
                    c.push(b * Math.sin(l / 180 * Math.PI)),
                    h.push(b * Math.cos(l / 180 * Math.PI));
                    c.push(c[0]);
                    h.push(h[0]);
                    s = AmCharts.line(m, c, h, t, s, q, v)
                } else s = AmCharts.circle(m, b, "#FFFFFF", 0, q, t, s);
                s.translate(f, H);
                d.push(s)
            }
        if (1 == e && 0 < w && !g) {
                g = a.previousCoord;
                if ("polygons" == A) {
                    for (k = z; 0 <= k; k--) l = 180 - 360 / z * k,
                    c.push(g * Math.sin(l / 180 * Math.PI)),
                    h.push(g * Math.cos(l / 180 * Math.PI));
                    z = AmCharts.polygon(m, c, h, u, w)
                } else z = AmCharts.wedge(m, 0, 0, 0, -360, b, b, g, 0, {
                    fill: u,
                    "fill-opacity": w,
                    stroke: 0,
                    "stroke-opacity": 0,
                    "stroke-width": 0
                });
                d.push(z);
                z.translate(f, H)
            }!1 === a.visible && (G && G.hide(), W && W.hide());
        a.counter = 0 === e ? 1 : 0;
        a.previousCoord = b
    },
    graphics: function () {
        return this.set
    },
    getLabel: function () {
        return this.label
    }
});
AmCharts.RadarFill = AmCharts.Class({
    construct: function (a, b, c, d) {
        b -= a.axisWidth;
        c -= a.axisWidth;
        var e = Math.max(b, c);
        b = c = Math.min(b, c);
        c = a.chart.container;
        var f = d.fillAlpha,
            g = d.fillColor,
            e = Math.abs(e - a.y);
        b = Math.abs(b - a.y);
        var h = Math.max(e, b);
        b = Math.min(e, b);
        e = h;
        h = -d.angle;
        d = -d.toAngle;
        isNaN(h) && (h = 0);
        isNaN(d) && (d = -360);
        this.set = c.set();
        void 0 === g && (g = "#000000");
        isNaN(f) && (f = 0);
        if ("polygons" == a.gridType) {
                d = [];
                var k = [],
                    l = a.data.length,
                    m;
                for (m = 0; m < l; m++) h = 180 - 360 / l * m,
                d.push(e * Math.sin(h / 180 * Math.PI)),
                k.push(e * Math.cos(h / 180 * Math.PI));
                d.push(d[0]);
                k.push(k[0]);
                for (m = l; 0 <= m; m--) h = 180 - 360 / l * m,
                d.push(b * Math.sin(h / 180 * Math.PI)),
                k.push(b * Math.cos(h / 180 * Math.PI));
                this.fill = AmCharts.polygon(c, d, k, g, f)
            } else this.fill = AmCharts.wedge(c, 0, 0, h, d - h, e, e, b, 0, {
                fill: g,
                "fill-opacity": f,
                stroke: 0,
                "stroke-opacity": 0,
                "stroke-width": 0
            });
        this.set.push(this.fill);
        this.fill.translate(a.x, a.y)
    },
    graphics: function () {
        return this.set
    },
    getLabel: function () {}
});
AmCharts.AmGraph = AmCharts.Class({
    construct: function () {
        this.createEvents("rollOverGraphItem", "rollOutGraphItem", "clickGraphItem", "doubleClickGraphItem", "rightClickGraphItem", "clickGraph");
        this.type = "line";
        this.stackable = !0;
        this.columnCount = 1;
        this.columnIndex = 0;
        this.centerCustomBullets = this.showBalloon = !0;
        this.maxBulletSize = 50;
        this.minBulletSize = 0;
        this.balloonText = "[[value]]";
        this.hidden = this.scrollbar = this.animationPlayed = !1;
        this.columnWidth = 0.8;
        this.pointPosition = "middle";
        this.depthCount = 1;
        this.includeInMinMax = !0;
        this.negativeBase = 0;
        this.visibleInLegend = !0;
        this.showAllValueLabels = !1;
        this.showBalloonAt = "close";
        this.lineThickness = 1;
        this.dashLength = 0;
        this.connect = !0;
        this.lineAlpha = 1;
        this.bullet = "none";
        this.bulletBorderThickness = 2;
        this.bulletAlpha = this.bulletBorderAlpha = 1;
        this.bulletSize = 8;
        this.hideBulletsCount = this.bulletOffset = 0;
        this.labelPosition = "top";
        this.cornerRadiusTop = 0;
        this.cursorBulletAlpha = 1;
        this.gradientOrientation = "vertical";
        this.dy = this.dx = 0;
        this.periodValue = "";
        this.y = this.x = 0
    },
    draw: function () {
        var a =
        this.chart,
            b = a.container;
        this.container = b;
        this.destroy();
        var c = b.set(),
            d = b.set();
        this.behindColumns ? (a.graphsBehindSet.push(c), a.bulletBehindSet.push(d)) : (a.graphsSet.push(c), a.bulletSet.push(d));
        this.bulletSet = d;
        if (!this.scrollbar) {
                var e = a.marginLeftReal,
                    a = a.marginTopReal;
                c.translate(e, a);
                d.translate(e, a)
            }
        b = b.set();
        AmCharts.remove(this.columnsSet);
        c.push(b);
        this.set = c;
        this.columnsSet = b;
        this.columnsArray = [];
        this.ownColumns = [];
        this.allBullets = [];
        this.animationArray = [];
        AmCharts.ifArray(this.data) && (c = !1, "xy" == this.chartType ? this.xAxis.axisCreated && this.yAxis.axisCreated && (c = !0) : this.valueAxis.axisCreated && (c = !0), !this.hidden && c && this.createGraph())
    },
    createGraph: function () {
        var a = this,
            b = a.chart;
        "inside" == a.labelPosition && (a.labelPosition = "bottom");
        a.startAlpha = b.startAlpha;
        a.seqAn = b.sequencedAnimation;
        a.baseCoord = a.valueAxis.baseCoord;
        a.fillColors || (a.fillColors = a.lineColor);
        void 0 === a.fillAlphas && (a.fillAlphas = 0);
        void 0 === a.bulletColor && (a.bulletColor = a.lineColor, a.bulletColorNegative = a.negativeLineColor);
        void 0 === a.bulletAlpha && (a.bulletAlpha = a.lineAlpha);
        a.bulletBorderColor || (a.bulletBorderAlpha = 0);
        clearTimeout(a.playedTO);
        if (!isNaN(a.valueAxis.min) && !isNaN(a.valueAxis.max)) {
                switch (a.chartType) {
                case "serial":
                    a.createSerialGraph();
                    "candlestick" == a.type && 1 > a.valueAxis.minMaxMultiplier && a.positiveClip(a.set);
                    break;
                case "radar":
                    a.createRadarGraph();
                    break;
                case "xy":
                    a.createXYGraph(),
                    a.positiveClip(a.set)
                }
                a.playedTO = setTimeout(function () {
                    a.setAnimationPlayed.call(a)
                }, 500 * a.chart.startDuration)
            }
    },
    setAnimationPlayed: function () {
        this.animationPlayed = !0
    },
    createXYGraph: function () {
        var a = [],
            b = [],
            c = this.xAxis,
            d = this.yAxis;
        this.pmh = d.viH + 1;
        this.pmw = c.viW + 1;
        this.pmy = this.pmx = 0;
        var e;
        for (e = this.start; e <= this.end; e++) {
                var f = this.data[e].axes[c.id].graphs[this.id],
                    g = f.values,
                    h = g.x,
                    k = g.y,
                    g = c.getCoordinate(h),
                    l = d.getCoordinate(k);
                !isNaN(h) && !isNaN(k) && (a.push(g), b.push(l), (h = this.createBullet(f, g, l, e)) || (h = 0), k = this.labelText) && (f = this.createLabel(f, g, l, k), this.allBullets.push(f), this.positionLabel(g, l, f, this.labelPosition, h))
            }
        this.drawLineGraph(a, b);
        this.launchAnimation()
    },
    createRadarGraph: function () {
        var a = this.valueAxis.stackType,
            b = [],
            c = [],
            d, e, f;
        for (f = this.start; f <= this.end; f++) {
                var g = this.data[f].axes[this.valueAxis.id].graphs[this.id],
                    h;
                h = "none" == a || "3d" == a ? g.values.value : g.values.close;
                if (isNaN(h)) this.drawLineGraph(b, c),
                b = [],
                c = [];
                else {
                        var k = this.y - (this.valueAxis.getCoordinate(h) - this.height),
                            l = 180 - 360 / (this.end - this.start + 1) * f;
                        h = k * Math.sin(l / 180 * Math.PI);
                        k *= Math.cos(l / 180 * Math.PI);
                        b.push(h);
                        c.push(k);
                            (l = this.createBullet(g, h, k, f)) || (l = 0);
                        var m = this.labelText;
                        m && (g = this.createLabel(g, h, k, m), this.allBullets.push(g), this.positionLabel(h, k, g, this.labelPosition, l));
                        isNaN(d) && (d = h);
                        isNaN(e) && (e = k)
                    }
            }
        b.push(d);
        c.push(e);
        this.drawLineGraph(b, c);
        this.launchAnimation()
    },
    positionLabel: function (a, b, c, d, e) {
        var f = c.getBBox();
        switch (d) {
        case "left":
            a -= (f.width + e) / 2 + 2;
            break;
        case "top":
            b -= (e + f.height) / 2 + 1;
            break;
        case "right":
            a += (f.width + e) / 2 + 2;
            break;
        case "bottom":
            b += (e + f.height) / 2 + 1
        }
        c.translate(a, b)
    },
    createSerialGraph: function () {
        var a = this.chart,
            b = this.id,
            c = this.index,
            d =
        this.data,
            e = this.chart.container,
            f = this.valueAxis,
            g = this.type,
            h = this.columnWidth,
            k = this.width,
            l = this.height,
            m = this.y,
            n = this.rotate,
            r = this.columnCount,
            p = AmCharts.toCoordinate(this.cornerRadiusTop, h / 2),
            s = this.connect,
            q = [],
            t = [],
            v, u, w = this.chart.graphs.length,
            y, x = this.dx / this.depthCount,
            A = this.dy / this.depthCount,
            z = f.stackType,
            G = this.labelPosition,
            H = this.start,
            O = this.end,
            I = this.scrollbar,
            W = this.categoryAxis,
            U = this.baseCoord,
            sa = this.negativeBase,
            R = this.columnIndex,
            T = this.lineThickness,
            P = this.lineAlpha,
            la = this.lineColor,
            da = this.dashLength,
            ea = this.set;
        "above" == G && (G = "top");
        "below" == G && (G = "bottom");
        var fa = G,
            X = 270;
        "horizontal" == this.gradientOrientation && (X = 0);
        this.gradientRotation = X;
        var V = this.chart.columnSpacing,
            F = W.cellWidth,
            E = (F * h - r) / r;
        V > E && (V = E);
        var $, B, Y, Wa = l + 1,
            Xa = k + 1,
            Pa = 0,
            Ya = 0,
            Za, $a, Qa, Ra, Cb = this.fillColors,
            Fa = this.negativeFillColors,
            ya = this.negativeLineColor,
            Ga = this.fillAlphas,
            Ha = this.negativeFillAlphas;
        "object" == typeof Ga && (Ga = Ga[0]);
        "object" == typeof Ha && (Ha = Ha[0]);
        var Sa = f.getCoordinate(f.min);
        f.logarithmic && (Sa = f.getCoordinate(f.minReal));
        this.minCoord = Sa;
        this.resetBullet && (this.bullet = "none");
        if (!I && ("line" == g || "smoothedLine" == g || "step" == g) && (1 == d.length && ("step" != g && "none" == this.bullet) && (this.bullet = "round", this.resetBullet = !0), Fa || void 0 != ya)) {
                var Ca = sa;
                Ca > f.max && (Ca = f.max);
                Ca < f.min && (Ca = f.min);
                f.logarithmic && (Ca = f.minReal);
                var ta = f.getCoordinate(Ca),
                    ob = f.getCoordinate(f.max);
                n ? (Wa = l, Xa = Math.abs(ob - ta), Za = l, $a = Math.abs(Sa - ta), Ra = Ya = 0, f.reversed ? (Pa = 0, Qa = ta) : (Pa = ta, Qa = 0)) : (Xa = k, Wa =
                    Math.abs(ob - ta), $a = k, Za = Math.abs(Sa - ta), Qa = Pa = 0, f.reversed ? (Ra = m, Ya = ta) : Ra = ta + 1)
            }
        var ua = Math.round;
        this.pmx = ua(Pa);
        this.pmy = ua(Ya);
        this.pmh = ua(Wa);
        this.pmw = ua(Xa);
        this.nmx = ua(Qa);
        this.nmy = ua(Ra);
        this.nmh = ua(Za);
        this.nmw = ua($a);
        9 > AmCharts.IEversion && 0 < AmCharts.IEversion && (this.nmy = this.nmx = 0, this.nmh = this.height);
        h = "column" == g ? (F * h - V * (r - 1)) / r : F * h;
        1 > h && (h = 1);
        var M;
        if ("line" == g || "step" == g || "smoothedLine" == g) {
                if (0 < H) for (M = H - 1; - 1 < M; M--) if ($ = d[M], B = $.axes[f.id].graphs[b], Y = B.values.value) {
                    H = M;
                    break
                }
                if (O < d.length - 1) for (M = O + 1; M < d.length; M++) if ($ = d[M], B = $.axes[f.id].graphs[b], Y = B.values.value) {
                    O = M;
                    break
                }
            }
        O < d.length - 1 && O++;
        var ga = [],
            ha = [],
            Ia = !1;
        if ("line" == g || "step" == g || "smoothedLine" == g) if (this.stackable && "regular" == z || "100%" == z || this.fillToGraph) Ia = !0;
        for (M = H; M <= O; M++) {
                $ = d[M];
                B = $.axes[f.id].graphs[b];
                B.index = M;
                var K, L, J, aa, na = NaN,
                    D = NaN,
                    C = NaN,
                    Q = NaN,
                    N = NaN,
                    Ja = NaN,
                    za = NaN,
                    Ka = NaN,
                    Aa = NaN,
                    Z = NaN,
                    ca = NaN,
                    oa = NaN,
                    pa = NaN,
                    S = NaN,
                    ab = NaN,
                    bb = NaN,
                    ia = NaN,
                    ja = void 0,
                    va = Cb,
                    La = Ga,
                    ma = la,
                    ka, qa;
                void 0 != B.color && (va = B.color);
                B.fillColors && (va = B.fillColors);
                isNaN(B.alpha) || (La = B.alpha);
                var ra = B.values;
                f.recalculateToPercents && (ra = B.percents);
                if (ra) {
                        S = this.stackable && "none" != z && "3d" != z ? ra.close : ra.value;
                        if ("candlestick" == g || "ohlc" == g) S = ra.close,
                        bb = ra.low,
                        za = f.getCoordinate(bb),
                        ab = ra.high,
                        Aa = f.getCoordinate(ab);
                        ia = ra.open;
                        C = f.getCoordinate(S);
                        isNaN(ia) || (N = f.getCoordinate(ia));
                        if (!I) switch (this.showBalloonAt) {
                        case "close":
                            B.y = C;
                            break;
                        case "open":
                            B.y = N;
                            break;
                        case "high":
                            B.y = Aa;
                            break;
                        case "low":
                            B.y = za
                        }
                        var na = $.x[W.id],
                            wa = Math.floor(F / 2),
                            Ma = wa;
                        "start" == this.pointPosition && (na -= F / 2, wa = 0, Ma = F);
                        I || (B.x = na); - 1E5 > na && (na = -1E5);
                        na > k + 1E5 && (na = k + 1E5);
                        n ? (D = C, Q = N, N = C = na, isNaN(ia) && !this.fillToGraph && (Q = U), Ja = za, Ka = Aa) : (Q = D = na, isNaN(ia) && !this.fillToGraph && (N = U));
                        S < ia && (B.isNegative = !0, Fa && (va = Fa), Ha && (La = Ha), void 0 != ya && (ma = ya));
                        switch (g) {
                            case "line":
                                isNaN(S) ? s || (this.drawLineGraph(q, t, ga, ha), q = [], t = [], ga = [], ha = []) : (B.isNegative = S < sa ? !0 : !1, q.push(D), t.push(C), Z = D, ca = C, oa = D, pa = C, !Ia || (isNaN(N) || isNaN(Q)) || (ga.push(Q), ha.push(N)));
                                break;
                            case "smoothedLine":
                                isNaN(S) ? s || (this.drawSmoothedGraph(q, t, ga, ha), q = [], t = [], ga = [], ha = []) : (B.isNegative = S < sa ? !0 : !1, q.push(D), t.push(C), Z = D, ca = C, oa = D, pa = C, !Ia || (isNaN(N) || isNaN(Q)) || (ga.push(Q), ha.push(N)));
                                break;
                            case "step":
                                isNaN(S) ? s || (u = NaN, this.drawLineGraph(q, t, ga, ha), q = [], t = [], ga = [], ha = []) : (B.isNegative = S < sa ? !0 : !1, n ? (isNaN(v) || (q.push(v), t.push(C - wa)), t.push(C - wa), q.push(D), t.push(C + Ma), q.push(D), !Ia || (isNaN(N) || isNaN(Q)) || (ga.push(Q), ha.push(N - wa), ga.push(Q), ha.push(N + Ma))) : (isNaN(u) || (t.push(u), q.push(D - wa)), q.push(D - wa), t.push(C), q.push(D + Ma), t.push(C), !Ia || (isNaN(N) || isNaN(Q)) || (ga.push(Q - wa), ha.push(N), ga.push(Q + Ma), ha.push(N))), v = D, u = C, Z = D, ca = C, oa = D, pa = C);
                                break;
                            case "column":
                                ka = ma;
                                void 0 != B.lineColor && (ka = B.lineColor);
                                if (!isNaN(S)) {
                                    S < sa ? (B.isNegative = !0, Fa && (va = Fa), void 0 != ya && (ma = ya)) : B.isNegative = !1;
                                    var pb = f.min,
                                        qb = f.max;
                                    if (!(S < pb && ia < pb || S > qb && ia > qb)) if (n) {
                                            "3d" == z ? (L = C - 0.5 * (h + V) + V / 2 + A * R, K = Q + x * R) : (L = C - (r / 2 - R) * (h + V) + V / 2, K = Q);
                                            J = h;
                                            Z = D;
                                            ca = L + h / 2;
                                            oa = D;
                                            pa = L + h / 2;
                                            L + J > l && (J = l - L);
                                            0 > L && (J += L, L = 0);
                                            aa = D - Q;
                                            var Db = K;
                                            K =
                                            AmCharts.fitToBounds(K, 0, k);
                                            aa += Db - K;
                                            aa = AmCharts.fitToBounds(aa, -K, k - K + x * R);
                                            if (L < l && 0 < J && (ja = new AmCharts.Cuboid(e, aa, J, x - a.d3x, A - a.d3y, va, La, T, ka, P, X, p, n), "bottom" != G)) if (G = f.reversed ? "left" : "right", 0 > S) G = f.reversed ? "right" : "left";
                                            else if ("regular" == z || "100%" == z) Z += this.dx
                                        } else {
                                            "3d" == z ? (K = D - 0.5 * (h + V) + V / 2 + x * R, L = N + A * R) : (K = D - (r / 2 - R) * (h + V) + V / 2, L = N);
                                            J = h;
                                            Z = K + h / 2;
                                            ca = C;
                                            oa = K + h / 2;
                                            pa = C;
                                            K + J > k + R * x && (J = k - K + R * x);
                                            0 > K && (J += K, K = 0);
                                            aa = C - N;
                                            var Eb = L;
                                            L = AmCharts.fitToBounds(L, this.dy, l);
                                            aa += Eb - L;
                                            aa = AmCharts.fitToBounds(aa, -L + A * R, l - L);
                                            if (K < k + R * x && 0 < J) if (ja = new AmCharts.Cuboid(e, J, aa, x - a.d3x, A - a.d3y, va, La, T, ka, this.lineAlpha, X, p, n), 0 > S && "middle" != G) G = "bottom";
                                            else if (G = fa, "regular" == z || "100%" == z) ca += this.dy
                                        }
                                    if (ja && (qa = ja.set, qa.translate(K, L), this.columnsSet.push(qa), (B.url || this.showHandOnHover) && qa.setAttr("cursor", "pointer"), !I)) {
                                            "none" == z && (y = n ? (this.end + 1 - M) * w - c : w * M + c);
                                            "3d" == z && (n ? (y = (w - c) * (this.end + 1 - M), Z += x * this.columnIndex, oa += x * this.columnIndex, B.y += x * this.columnIndex) : (y = (w - c) * (M + 1), Z += 3, ca += A * this.columnIndex + 7, pa += A * this.columnIndex, B.y += A * this.columnIndex));
                                            if ("regular" == z || "100%" == z) G = "middle",
                                            y = n ? 0 < ra.value ? (this.end + 1 - M) * w + c : (this.end + 1 - M) * w - c : 0 < ra.value ? w * M + c : w * M - c;
                                            this.columnsArray.push({
                                                column: ja,
                                                depth: y
                                            });
                                            B.x = n ? L + J / 2 : K + J / 2;
                                            this.ownColumns.push(ja);
                                            this.animateColumns(ja, M, D, Q, C, N);
                                            this.addListeners(qa, B)
                                        }
                                }
                                break;
                            case "candlestick":
                                if (!isNaN(ia) && !isNaN(S)) {
                                    var Ta, cb;
                                    ka = ma;
                                    void 0 != B.lineColor && (ka = B.lineColor);
                                    if (n) {
                                        if (L = C - h / 2, K = Q, J = h, L + J > l && (J = l - L), 0 > L && (J += L, L = 0), L < l && 0 < J) {
                                            var db, eb;
                                            S > ia ? (db = [D, Ka], eb = [Q, Ja]) : (db = [Q, Ka], eb = [D, Ja]);
                                            !isNaN(Ka) && !isNaN(Ja) && (C < l && 0 < C) && (Ta = AmCharts.line(e, db, [C, C], ka, P, T), cb = AmCharts.line(e, eb, [C, C], ka, P, T));
                                            aa = D - Q;
                                            ja = new AmCharts.Cuboid(e, aa, J, x, A, va, Ga, T, ka, P, X, p, n)
                                        }
                                    } else if (K = D - h / 2, L = N + T / 2, J = h, K + J > k && (J = k - K), 0 > K && (J += K, K = 0), aa = C - N, K < k && 0 < J) {
                                        var ja = new AmCharts.Cuboid(e, J, aa, x, A, va, La, T, ka, P, X, p, n),
                                            fb, gb;
                                        S > ia ? (fb = [C, Aa], gb = [N, za]) : (fb = [N, Aa], gb = [C, za]);
                                        !isNaN(Aa) && !isNaN(za) && (D < k && 0 < D) && (Ta = AmCharts.line(e, [D, D], fb, ka, P, T), cb = AmCharts.line(e, [D, D], gb, ka, P, T))
                                    }
                                    ja && (qa = ja.set, ea.push(qa), qa.translate(K, L - T / 2), (B.url || this.showHandOnHover) && qa.setAttr("cursor", "pointer"), Ta && (ea.push(Ta), ea.push(cb)), Z = D, ca = C, oa = D, pa = C, I || (B.x = n ? L + J / 2 : K + J / 2, this.animateColumns(ja, M, D, Q, C, N), this.addListeners(qa, B)))
                                }
                                break;
                            case "ohlc":
                                if (!(isNaN(ia) || isNaN(ab) || isNaN(bb) || isNaN(S))) {
                                    S < ia && (B.isNegative = !0, void 0 != ya && (ma = ya));
                                    var hb, ib, jb;
                                    if (n) {
                                        var kb = C - h / 2,
                                            kb = AmCharts.fitToBounds(kb, 0, l),
                                            rb = AmCharts.fitToBounds(C, 0, l),
                                            lb = C + h / 2,
                                            lb = AmCharts.fitToBounds(lb, 0, l);
                                        ib =
                                        AmCharts.line(e, [Q, Q], [kb, rb], ma, P, T, da);
                                        0 < C && C < l && (hb = AmCharts.line(e, [Ja, Ka], [C, C], ma, P, T, da));
                                        jb = AmCharts.line(e, [D, D], [rb, lb], ma, P, T, da)
                                    } else {
                                        var mb = D - h / 2,
                                            mb = AmCharts.fitToBounds(mb, 0, k),
                                            sb = AmCharts.fitToBounds(D, 0, k),
                                            nb = D + h / 2,
                                            nb = AmCharts.fitToBounds(nb, 0, k);
                                        ib = AmCharts.line(e, [mb, sb], [N, N], ma, P, T, da);
                                        0 < D && D < k && (hb = AmCharts.line(e, [D, D], [za, Aa], ma, P, T, da));
                                        jb = AmCharts.line(e, [sb, nb], [C, C], ma, P, T, da)
                                    }
                                    ea.push(ib);
                                    ea.push(hb);
                                    ea.push(jb);
                                    Z = D;
                                    ca = C;
                                    oa = D;
                                    pa = C
                                }
                            }
                        if (!I && !isNaN(S)) {
                                var tb = this.hideBulletsCount;
                                if (this.end - this.start <= tb || 0 === tb) {
                                    var Da = this.createBullet(B, oa, pa, M);
                                    Da || (Da = 0);
                                    var ub = this.labelText;
                                    if (ub) {
                                        var ba = this.createLabel(B, 0, 0, ub),
                                            xa = 0,
                                            Ba = 0,
                                            vb = ba.getBBox(),
                                            Ua = vb.width,
                                            Va = vb.height;
                                        switch (G) {
                                            case "left":
                                                xa = -(Ua / 2 + Da / 2 + 3);
                                                break;
                                            case "top":
                                                Ba = -(Va / 2 + Da / 2 + 3);
                                                break;
                                            case "right":
                                                xa = Da / 2 + 2 + Ua / 2;
                                                break;
                                            case "bottom":
                                                n && "column" == g ? (Z = U, 0 > S ? (xa = -6, ba.attr({
                                                    "text-anchor": "end"
                                                })) : (xa = 6, ba.attr({
                                                    "text-anchor": "start"
                                                }))) : (Ba = Da / 2 + Va / 2, ba.x = -(Ua / 2 + 2));
                                                break;
                                            case "middle":
                                                "column" == g && (n ? (Ba = -(Va / 2) + this.fontSize / 2, xa = -(D - Q) / 2 - x, 0 > aa && (xa += x), Math.abs(D - Q) < Ua && !this.showAllValueLabels && (ba.remove(), ba = null)) : (Ba = -(C - N) / 2, 0 > aa && (Ba -= A), Math.abs(C - N) < Va && !this.showAllValueLabels && (ba.remove(), ba = null)))
                                            }
                                        if (ba) {
                                                if (isNaN(ca) || isNaN(Z)) ba.remove(),
                                                ba = null;
                                                else if (Z += xa, ca += Ba, ba.translate(Z, ca), n) {
                                                    if (0 > ca || ca > l) ba.remove(),
                                                    ba = null
                                                } else {
                                                    var wb = 0;
                                                    "3d" == z && (wb = x * R);
                                                    if (0 > Z || Z > k + wb) ba.remove(),
                                                    ba = null
                                                }
                                                ba && this.allBullets.push(ba)
                                            }
                                    }
                                    if ("column" == g && "regular" == z || "100%" == z) {
                                        var xb = f.totalText;
                                        if (xb) {
                                            var Ea =
                                            this.createLabel(B, 0, 0, xb, f.totalTextColor);
                                            this.allBullets.push(Ea);
                                            var yb = Ea.getBBox(),
                                                zb = yb.width,
                                                Ab = yb.height,
                                                Na, Oa, Bb = f.totals[M];
                                            Bb && Bb.remove();
                                            n ? (Oa = C, Na = 0 > S ? D - zb / 2 - 2 : D + zb / 2 + 3) : (Na = D, Oa = 0 > S ? C + Ab / 2 : C - Ab / 2 - 3);
                                            Ea.translate(Na, Oa);
                                            f.totals[M] = Ea;
                                            n ? (0 > Oa || Oa > l) && Ea.remove() : (0 > Na || Na > k) && Ea.remove()
                                        }
                                    }
                                }
                            }
                    }
            }
        if ("line" == g || "step" == g || "smoothedLine" == g)"smoothedLine" == g ? this.drawSmoothedGraph(q, t, ga, ha) : this.drawLineGraph(q, t, ga, ha),
        I || this.launchAnimation();
        this.bulletsHidden && this.hideBullets()
    },
    animateColumns: function (a, b, c, d, e, f) {
        var g = this;
        c = g.chart.startDuration;
        0 < c && !g.animationPlayed && (g.seqAn ? (a.set.hide(), g.animationArray.push(a), a = setTimeout(function () {
            g.animate.call(g)
        }, 1E3 * c / (g.end - g.start + 1) * (b - g.start)), g.timeOuts.push(a)) : g.animate(a))
    },
    createLabel: function (a, b, c, d, e) {
        var f = this.chart,
            g = a.labelColor;
        void 0 == g && (g = this.color);
        void 0 == g && (g = f.color);
        void 0 != e && (g = e);
        e = this.fontSize;
        void 0 === e && (this.fontSize = e = f.fontSize);
        a = f.formatString(d, a, this);
        a = AmCharts.cleanFromEmpty(a);
        f = AmCharts.text(this.container, a, g, f.fontFamily, e);
        f.translate(b, c);
        this.bulletSet.push(f);
        return f
    },
    positiveClip: function (a) {
        a.clipRect(this.pmx, this.pmy, this.pmw, this.pmh)
    },
    negativeClip: function (a) {
        a.clipRect(this.nmx, this.nmy, this.nmw, this.nmh)
    },
    drawLineGraph: function (a, b, c, d) {
        var e = this;
        if (1 < a.length) {
            var f = e.set,
                g = e.container,
                h = g.set(),
                k = g.set();
            f.push(k);
            f.push(h);
            var l = e.lineAlpha,
                m = e.lineThickness,
                n = e.dashLength,
                f = e.fillAlphas,
                r = e.lineColor,
                p = e.fillColors,
                s = e.negativeLineColor,
                q = e.negativeFillColors,
                t = e.negativeFillAlphas,
                v = e.baseCoord;
            0 != e.negativeBase && (v = e.valueAxis.getCoordinate(e.negativeBase));
            r = AmCharts.line(g, a, b, r, l, m, n, !1, !0);
            h.push(r);
            h.click(function () {
                    e.handleGraphClick()
                });
            void 0 !== s && (l = AmCharts.line(g, a, b, s, l, m, n, !1, !0), k.push(l));
            if (0 < f || 0 < t) if (l = a.join(";").split(";"), m = b.join(";").split(";"), "serial" == e.chartType && (0 < c.length ? (c.reverse(), d.reverse(), l = a.concat(c), m = b.concat(d)) : e.rotate ? (m.push(m[m.length - 1]), l.push(v), m.push(m[0]), l.push(v), m.push(m[0]), l.push(l[0])) : (l.push(l[l.length - 1]), m.push(v), l.push(l[0]), m.push(v), l.push(a[0]), m.push(m[0]))), 0 < f && (a = AmCharts.polygon(g, l, m, p, f, 0, 0, 0, this.gradientRotation), h.push(a)), q || void 0 !== s) isNaN(t) && (t = f),
            q || (q = s),
            g = AmCharts.polygon(g, l, m, q, t, 0, 0, 0, this.gradientRotation),
            k.push(g),
            k.click(function () {
                    e.handleGraphClick()
                });
            e.applyMask(k, h)
        }
    },
    applyMask: function (a, b) {
        var c = a.length();
        "serial" != this.chartType || this.scrollbar || (this.positiveClip(b), 0 < c && this.negativeClip(a))
    },
    drawSmoothedGraph: function (a, b, c, d) {
        if (1 < a.length) {
            var e = this.set,
                f = this.container,
                g = f.set(),
                h = f.set();
            e.push(h);
            e.push(g);
            var k = this.lineAlpha,
                l = this.lineThickness,
                e = this.dashLength,
                m = this.fillAlphas,
                n = this.fillColors,
                r = this.negativeLineColor,
                p = this.negativeFillColors,
                s = this.negativeFillAlphas,
                q = this.baseCoord,
                t = new AmCharts.Bezier(f, a, b, this.lineColor, k, l, n, 0, e);
            g.push(t.path);
            void 0 !== r && (k = new AmCharts.Bezier(f, a, b, r, k, l, n, 0, e), h.push(k.path));
            0 < m && (l = a.join(";").split(";"), t = b.join(";").split(";"), k = "", 0 < c.length ? (c.reverse(), d.reverse(), l = a.concat(c), t = b.concat(d)) : (this.rotate ? (k += " L" + q + "," + b[b.length - 1], k += " L" + q + "," + b[0]) : (k += " L" + a[a.length - 1] + "," + q, k += " L" + a[0] + "," + q), k += " L" + a[0] + "," + b[0]), c = new AmCharts.Bezier(f, l, t, NaN, 0, 0, n, m, e, k), g.push(c.path), p || void 0 !== r) && (s || (s = m), p || (p = r), a = new AmCharts.Bezier(f, a, b, NaN, 0, 0, p, s, e, k), h.push(a.path));
            this.applyMask(h, g)
        }
    },
    launchAnimation: function () {
        var a = this,
            b = a.chart.startDuration;
        if (0 < b && !a.animationPlayed) {
                var c = a.set,
                    d = a.bulletSet;
                AmCharts.VML || (c.attr({
                        opacity: a.startAlpha
                    }), d.attr({
                        opacity: a.startAlpha
                    }));
                c.hide();
                d.hide();
                a.seqAn ? (b = setTimeout(function () {
                        a.animateGraphs.call(a)
                    }, 1E3 * a.index * b), a.timeOuts.push(b)) : a.animateGraphs()
            }
    },
    animateGraphs: function () {
        var a = this.chart,
            b = this.set,
            c = this.bulletSet,
            d = this.x,
            e = this.y;
        b.show();
        c.show();
        var f = a.startDuration,
            a = a.startEffect;
        b && (this.rotate ? (b.translate(-1E3, e), c.translate(-1E3, e)) : (b.translate(d, -1E3), c.translate(d, -1E3)), b.animate({
                opacity: 1,
                translate: d + "," + e
            }, f, a), c.animate({
                opacity: 1,
                translate: d + "," + e
            }, f, a))
    },
    animate: function (a) {
        var b = this.chart,
            c = this.container,
            d = this.animationArray;
        !a && 0 < d.length && (a = d[0], d.shift());
        c = c[AmCharts.getEffect(b.startEffect)];
        b = b.startDuration;
        a && (this.rotate ? a.animateWidth(b, c) : a.animateHeight(b, c), a.set.show())
    },
    legendKeyColor: function () {
        var a = this.legendColor,
            b = this.lineAlpha;
        void 0 === a && (a = this.lineColor, 0 === b && (b = this.fillColors) && (a = "object" == typeof b ? b[0] : b));
        return a
    },
    legendKeyAlpha: function () {
        var a = this.legendAlpha;
        void 0 === a && (a = this.lineAlpha, 0 === a && this.fillAlphas && (a = this.fillAlphas), 0 === a && (a = this.bulletAlpha), 0 === a && (a = 1));
        return a
    },
    createBullet: function (a, b, c, d) {
        d = this.container;
        var e = this.bulletOffset,
            f = this.bulletSize;
        isNaN(a.bulletSize) || (f = a.bulletSize);
        if (!isNaN(this.maxValue)) {
                var g = a.values.value;
                isNaN(g) || (f = g / this.maxValue * this.maxBulletSize)
            }
        f < this.minBulletSize && (f = this.minBulletSize);
        this.rotate ? b += e : c -= e;
        var h;
        if ("none" != this.bullet || a.bullet) {
                var k = this.bulletColor;
                a.isNegative && void 0 !== this.bulletColorNegative && (k = this.bulletColorNegative);
                void 0 !== a.color && (k = a.color);
                e = this.bullet;
                a.bullet && (e = a.bullet);
                var g = this.bulletBorderThickness,
                    l = this.bulletBorderColor,
                    m = this.bulletBorderAlpha,
                    n = k,
                    r = this.bulletAlpha,
                    k = a.alpha;
                isNaN(k) || (r = k);
                k = 0;
                switch (e) {
                    case "round":
                        h = AmCharts.circle(d, f / 2, n, r, g, l, m);
                        break;
                    case "square":
                        h = AmCharts.polygon(d, [0, f, f, 0], [0, 0, f, f], n, r, g, l, m);
                        b -= f / 2;
                        c -= f / 2;
                        k = -f / 2;
                        break;
                    case "triangleUp":
                        h = AmCharts.triangle(d, f, 0, n, r, g, l, m);
                        break;
                    case "triangleDown":
                        h = AmCharts.triangle(d, f, 180, n, r, g, l, m);
                        break;
                    case "triangleLeft":
                        h = AmCharts.triangle(d, f, 270, n, r, g, l, m);
                        break;
                    case "triangleRight":
                        h =
                        AmCharts.triangle(d, f, 90, n, r, g, l, m);
                        break;
                    case "bubble":
                        h = AmCharts.circle(d, f / 2, n, r, g, l, m, !0)
                    }
            }
        g = e = 0;
        if (this.customBullet || a.customBullet) l = this.customBullet,
        a.customBullet && (l = a.customBullet),
        l && (h && h.remove(), "function" == typeof l ? (h = new l, h.chart = this.chart, a.bulletConfig && (h.availableSpace = c, h.graph = this, a.bulletConfig.minCoord = this.minCoord - c, h.bulletConfig = a.bulletConfig), h.write(d), h = h.set) : (this.chart.path && (l = this.chart.path + l), h = d.image(l, 0, 0, f, f), this.centerCustomBullets && (b -= f / 2, c -= f / 2, e -= f / 2, g -= f / 2)));
        h && ((a.url || this.showHandOnHover) && h.setAttr("cursor", "pointer"), "serial" == this.chartType && (b - e < k || b - e > this.width || c < -f / 2 || c - g > this.height) && (h.remove(), h = null), h && (this.bulletSet.push(h), h.translate(b, c), this.addListeners(h, a), this.allBullets.push(h)));
        return f
    },
    showBullets: function () {
        var a = this.allBullets,
            b;
        this.bulletsHidden = !1;
        for (b = 0; b < a.length; b++) a[b].show()
    },
    hideBullets: function () {
        var a = this.allBullets,
            b;
        this.bulletsHidden = !0;
        for (b = 0; b < a.length; b++) a[b].hide()
    },
    addListeners: function (a, b) {
        var c = this;
        a.mouseover(function () {
            c.handleRollOver(b)
        }).mouseout(function () {
            c.handleRollOut(b)
        }).touchend(function () {
            c.handleRollOver(b)
        }).touchstart(function () {
            c.handleRollOver(b)
        }).click(function () {
            c.handleClick(b)
        }).dblclick(function () {
            c.handleDoubleClick(b)
        }).contextmenu(function () {
            c.handleRightClick(b)
        })
    },
    handleRollOver: function (a) {
        if (a) {
            var b = this.chart,
                c = {
                    type: "rollOverGraphItem",
                    item: a,
                    index: a.index,
                    graph: this,
                    target: this,
                    chart: this.chart
                };
            this.fire("rollOverGraphItem", c);
            b.fire("rollOverGraphItem", c);
            clearTimeout(b.hoverInt);
            c = this.showBalloon;
            b.chartCursor && "serial" == this.chartType && (c = !1, !b.chartCursor.valueBalloonsEnabled && this.showBalloon && (c = !0));
            c && (c = b.formatString(this.balloonText, a, a.graph), c = AmCharts.cleanFromEmpty(c), a = b.getBalloonColor(this, a), b.balloon.showBullet = !1, b.balloon.pointerOrientation = "V", b.showBalloon(c, a, !0))
        }
    },
    handleRollOut: function (a) {
        this.chart.hideBalloon();
        a && (a = {
            type: "rollOutGraphItem",
            item: a,
            index: a.index,
            graph: this,
            target: this,
            chart: this.chart
        }, this.fire("rollOutGraphItem", a), this.chart.fire("rollOutGraphItem", a))
    },
    handleClick: function (a) {
        if (a) {
            var b = {
                type: "clickGraphItem",
                item: a,
                index: a.index,
                graph: this,
                target: this,
                chart: this.chart
            };
            this.fire("clickGraphItem", b);
            this.chart.fire("clickGraphItem", b);
            AmCharts.getURL(a.url, this.urlTarget)
        }
        this.handleGraphClick()
    },
    handleGraphClick: function () {
        var a = {
            type: "clickGraph",
            graph: this,
            target: this,
            chart: this.chart
        };
        this.fire("clickGraph", a);
        this.chart.fire("clickGraph", a)
    },
    handleRightClick: function (a) {
        a && (a = {
            type: "rightClickGraphItem",
            item: a,
            index: a.index,
            graph: this,
            target: this,
            chart: this.chart
        }, this.fire("rightClickGraphItem", a), this.chart.fire("rightClickGraphItem", a))
    },
    handleDoubleClick: function (a) {
        a && (a = {
            type: "doubleClickGraphItem",
            item: a,
            index: a.index,
            graph: this,
            target: this,
            chart: this.chart
        }, this.fire("doubleClickGraphItem", a), this.chart.fire("doubleClickGraphItem", a))
    },
    zoom: function (a, b) {
        this.start = a;
        this.end = b;
        this.draw()
    },
    changeOpacity: function (a) {
        var b = this.set;
        b && b.setAttr("opacity", a);
        if (b = this.ownColumns) {
            var c;
            for (c =
            0; c < b.length; c++) {
                var d = b[c].set;
                d && d.setAttr("opacity", a)
            }
        }(b = this.bulletSet) && b.setAttr("opacity", a)
    },
    destroy: function () {
        AmCharts.remove(this.set);
        AmCharts.remove(this.bulletSet);
        var a = this.timeOuts;
        if (a) {
            var b;
            for (b = 0; b < a.length; b++) clearTimeout(a[b])
        }
        this.timeOuts = []
    }
});
AmCharts.ChartCursor = AmCharts.Class({
    construct: function () {
        this.createEvents("changed", "zoomed", "onHideCursor", "draw", "selected");
        this.enabled = !0;
        this.cursorAlpha = 1;
        this.selectionAlpha = 0.2;
        this.cursorColor = "#CC0000";
        this.categoryBalloonAlpha = 1;
        this.color = "#FFFFFF";
        this.type = "cursor";
        this.zoomed = !1;
        this.zoomable = !0;
        this.pan = !1;
        this.animate = !0;
        this.categoryBalloonDateFormat = "MMM DD, YYYY";
        this.categoryBalloonEnabled = this.valueBalloonsEnabled = !0;
        this.rolledOver = !1;
        this.cursorPosition = "middle";
        this.bulletsEnabled =
        this.skipZoomDispatch = !1;
        this.bulletSize = 8;
        this.selectWithoutZooming = this.oneBalloonOnly = !1
    },
    draw: function () {
        var a = this;
        a.destroy();
        var b = a.chart,
            c = b.container;
        a.rotate = b.rotate;
        a.container = c;
        c = c.set();
        c.translate(a.x, a.y);
        a.set = c;
        b.cursorSet.push(c);
        c = new AmCharts.AmBalloon;
        c.chart = b;
        a.categoryBalloon = c;
        c.cornerRadius = 0;
        c.borderThickness = 0;
        c.borderAlpha = 0;
        c.showBullet = !1;
        var d = a.categoryBalloonColor;
        void 0 === d && (d = a.cursorColor);
        c.fillColor = d;
        c.fillAlpha = a.categoryBalloonAlpha;
        c.borderColor = d;
        c.color =
        a.color;
        a.rotate && (c.pointerOrientation = "H");
        if (a.valueBalloonsEnabled) for (c = 0; c < b.graphs.length; c++) d = new AmCharts.AmBalloon,
        d.chart = b,
        AmCharts.copyProperties(b.balloon, d),
        b.graphs[c].valueBalloon = d;
        "cursor" == a.type ? a.createCursor() : a.createCrosshair();
        a.interval = setInterval(function () {
                a.detectMovement.call(a)
            }, 40)
    },
    updateData: function () {
        var a = this.chart;
        this.data = a.chartData;
        this.firstTime = a.firstTime;
        this.lastTime = a.lastTime
    },
    createCursor: function () {
        var a = this.chart,
            b = this.cursorAlpha,
            c = a.categoryAxis,
            d = c.position,
            e = c.inside,
            f = c.axisThickness,
            g = this.categoryBalloon,
            h, k, l = a.dx,
            m = a.dy,
            n = this.x,
            r = this.y,
            p = this.width,
            s = this.height,
            a = a.rotate,
            q = c.tickLength;
        g.pointerWidth = q;
        a ? (h = [0, p, p + l], k = [0, 0, m]) : (h = [l, 0, 0], k = [m, 0, s]);
        this.line = b = AmCharts.line(this.container, h, k, this.cursorColor, b, 1);
        this.set.push(b);
        a ? (e && (g.pointerWidth = 0), "right" == d ? e ? g.setBounds(n, r + m, n + p + l, r + s + m) : g.setBounds(n + p + l + f, r + m, n + p + 1E3, r + s + m) : e ? g.setBounds(n, r, p + n, s + r) : g.setBounds(-1E3, -1E3, n - q - f, r + s + 15)) : (g.maxWidth = p, c.parseDates && (q = 0, g.pointerWidth = 0), "top" == d ? e ? g.setBounds(n + l, r + m, p + l + n, s + r) : g.setBounds(n + l, -1E3, p + l + n, r + m - q - f) : e ? g.setBounds(n, r, p + n, s + r - q) : g.setBounds(n, r + s + q + f - 1, n + p, r + s + q + f));
        this.hideCursor()
    },
    createCrosshair: function () {
        var a = this.cursorAlpha,
            b = this.container,
            c = AmCharts.line(b, [0, 0], [0, this.height], this.cursorColor, a, 1),
            a = AmCharts.line(b, [0, this.width], [0, 0], this.cursorColor, a, 1);
        this.set.push(c);
        this.set.push(a);
        this.vLine = c;
        this.hLine = a;
        this.hideCursor()
    },
    detectMovement: function () {
        var a = this.chart;
        if (a.mouseIsOver) {
            var b =
            a.mouseX - this.x,
                c = a.mouseY - this.y;
            0 < b && b < this.width && 0 < c && c < this.height ? (this.drawing ? this.rolledOver || a.setMouseCursor("crosshair") : this.pan && (this.rolledOver || a.setMouseCursor("move")), this.rolledOver = !0, this.setPosition()) : this.rolledOver && (this.handleMouseOut(), this.rolledOver = !1)
        } else this.rolledOver && (this.handleMouseOut(), this.rolledOver = !1)
    },
    getMousePosition: function () {
        var a, b = this.width,
            c = this.height;
        a = this.chart;
        this.rotate ? (a = a.mouseY - this.y, 0 > a && (a = 0), a > c && (a = c)) : (a = a.mouseX - this.x, 0 > a && (a = 0), a > b && (a = b));
        return a
    },
    updateCrosshair: function () {
        var a = this.chart,
            b = a.mouseX - this.x,
            c = a.mouseY - this.y,
            d = this.vLine,
            e = this.hLine,
            b = AmCharts.fitToBounds(b, 0, this.width),
            c = AmCharts.fitToBounds(c, 0, this.height);
        0 < this.cursorAlpha && (d.show(), e.show(), d.translate(b, 0), e.translate(0, c));
        this.zooming && (a.hideXScrollbar && (b = NaN), a.hideYScrollbar && (c = NaN), this.updateSelectionSize(b, c));
        a.mouseIsOver || this.zooming || this.hideCursor()
    },
    updateSelectionSize: function (a, b) {
        AmCharts.remove(this.selection);
        var c = this.selectionPosX,
            d = this.selectionPosY,
            e = 0,
            f = 0,
            g = this.width,
            h = this.height;
        isNaN(a) || (c > a && (e = a, g = c - a), c < a && (e = c, g = a - c), c == a && (e = a, g = 0));
        isNaN(b) || (d > b && (f = b, h = d - b), d < b && (f = d, h = b - d), d == b && (f = b, h = 0));
        0 < g && 0 < h && (c = AmCharts.rect(this.container, g, h, this.cursorColor, this.selectionAlpha), c.translate(e + this.x, f + this.y), this.selection = c)
    },
    arrangeBalloons: function () {
        var a = this.valueBalloons,
            b = this.x,
            c = this.y,
            d = this.height + c;
        a.sort(this.compareY);
        var e;
        for (e = 0; e < a.length; e++) {
                var f = a[e].balloon;
                f.setBounds(b, c, b + this.width, d);
                f.draw();
                d = f.yPos - 3
            }
        this.arrangeBalloons2()
    },
    compareY: function (a, b) {
        return a.yy < b.yy ? 1 : -1
    },
    arrangeBalloons2: function () {
        var a = this.valueBalloons;
        a.reverse();
        var b, c = this.x,
            d, e;
        for (e = 0; e < a.length; e++) {
                var f = a[e].balloon;
                b = f.bottom;
                var g = f.bottom - f.yPos;
                0 < e && b - g < d + 3 && (f.setBounds(c, d + 3, c + this.width, d + g + 3), f.draw());
                f.set && f.set.show();
                d = f.bottom
            }
    },
    showBullets: function () {
        AmCharts.remove(this.allBullets);
        var a = this.container,
            b = a.set();
        this.set.push(b);
        this.set.show();
        this.allBullets =
        b;
        var b = this.chart.graphs,
            c;
        for (c = 0; c < b.length; c++) {
                var d = b[c];
                if (!d.hidden && d.balloonText) {
                    var e = this.data[this.index].axes[d.valueAxis.id].graphs[d.id],
                        f = e.y;
                    if (!isNaN(f)) {
                            var g, h;
                            g = e.x;
                            this.rotate ? (h = f, f = g) : h = g;
                            d = AmCharts.circle(a, this.bulletSize / 2, this.chart.getBalloonColor(d, e), d.cursorBulletAlpha);
                            d.translate(h, f);
                            this.allBullets.push(d)
                        }
                }
            }
    },
    destroy: function () {
        this.clear();
        AmCharts.remove(this.selection);
        this.selection = null;
        var a = this.categoryBalloon;
        a && a.destroy();
        this.destroyValueBalloons();
        AmCharts.remove(this.set)
    },
    clear: function () {
        clearInterval(this.interval)
    },
    destroyValueBalloons: function () {
        var a = this.valueBalloons;
        if (a) {
            var b;
            for (b = 0; b < a.length; b++) a[b].balloon.hide()
        }
    },
    zoom: function (a, b, c, d) {
        var e = this.chart;
        this.destroyValueBalloons();
        this.zooming = !1;
        var f;
        this.rotate ? this.selectionPosY = f = e.mouseY : this.selectionPosX = f = e.mouseX;
        this.start = a;
        this.end = b;
        this.startTime = c;
        this.endTime = d;
        this.zoomed = !0;
        var g = e.categoryAxis,
            e = this.rotate;
        f = this.width;
        var h = this.height;
        g.parseDates && !g.equalSpacing ? (a = d - c + g.minDuration(), a = e ? h / a : f / a) : a = e ? h / (b - a) : f / (b - a);
        this.stepWidth = a;
        this.setPosition();
        this.hideCursor()
    },
    hideObj: function (a) {
        a && a.hide()
    },
    hideCursor: function (a) {
        void 0 === a && (a = !0);
        this.hideObj(this.set);
        this.hideObj(this.categoryBalloon);
        this.hideObj(this.line);
        this.hideObj(this.vLine);
        this.hideObj(this.hLine);
        this.hideObj(this.allBullets);
        this.destroyValueBalloons();
        this.selectWithoutZooming || AmCharts.remove(this.selection);
        this.previousIndex = NaN;
        a && this.fire("onHideCursor", {
            type: "onHideCursor",
            chart: this.chart,
            target: this
        });
        this.drawing || this.chart.setMouseCursor("auto")
    },
    setPosition: function (a, b) {
        void 0 === b && (b = !0);
        if ("cursor" == this.type) {
            if (AmCharts.ifArray(this.data)) {
                isNaN(a) && (a = this.getMousePosition());
                if ((a != this.previousMousePosition || !0 === this.zoomed || this.oneBalloonOnly) && !isNaN(a)) {
                    var c = this.chart.categoryAxis.xToIndex(a);
                    if (c != this.previousIndex || this.zoomed || "mouse" == this.cursorPosition || this.oneBalloonOnly) this.updateCursor(c, b),
                    this.zoomed = !1
                }
                this.previousMousePosition =
                a
            }
        } else this.updateCrosshair()
    },
    updateCursor: function (a, b) {
        var c = this.chart,
            d = c.mouseX - this.x,
            e = c.mouseY - this.y;
        this.drawingNow && (AmCharts.remove(this.drawingLine), this.drawingLine = AmCharts.line(this.container, [this.x + this.drawStartX, this.x + d], [this.y + this.drawStartY, this.y + e], this.cursorColor, 1, 1));
        if (this.enabled) {
                void 0 === b && (b = !0);
                this.index = a;
                var f = c.categoryAxis,
                    g = c.dx,
                    h = c.dy,
                    k = this.x,
                    l = this.y,
                    m = this.width,
                    n = this.height,
                    r = this.data[a];
                if (r) {
                        var p = r.x[f.id],
                            s = c.rotate,
                            q = f.inside,
                            t = this.stepWidth,
                            v = this.categoryBalloon,
                            u = this.firstTime,
                            w = this.lastTime,
                            y = this.cursorPosition,
                            x = f.position,
                            A = this.zooming,
                            z = this.panning,
                            G = c.graphs,
                            H = f.axisThickness;
                        if (c.mouseIsOver || A || z || this.forceShow) if (this.forceShow = !1, z) {
                                var g = this.panClickPos,
                                    c = this.panClickEndTime,
                                    A = this.panClickStartTime,
                                    O = this.panClickEnd,
                                    k = this.panClickStart,
                                    d = (s ? g - e : g - d) / t;
                                if (!f.parseDates || f.equalSpacing) d = Math.round(d);
                                0 !== d && (g = {
                                        type: "zoomed",
                                        target: this
                                    }, g.chart = this.chart, f.parseDates && !f.equalSpacing ? (c + d > w && (d = w - c), A + d < u && (d =
                                    u - A), g.start = A + d, g.end = c + d, this.fire(g.type, g)) : O + d >= this.data.length || 0 > k + d || (g.start = k + d, g.end = O + d, this.fire(g.type, g)))
                            } else {
                                "start" == y && (p -= f.cellWidth / 2);
                                "mouse" == y && c.mouseIsOver && (p = s ? e - 2 : d - 2);
                                if (s) {
                                    if (0 > p) if (A) p = 0;
                                    else {
                                        this.hideCursor();
                                        return
                                    }
                                    if (p > n + 1) if (A) p = n + 1;
                                    else {
                                        this.hideCursor();
                                        return
                                    }
                                } else {
                                    if (0 > p) if (A) p = 0;
                                    else {
                                        this.hideCursor();
                                        return
                                    }
                                    if (p > m) if (A) p = m;
                                    else {
                                        this.hideCursor();
                                        return
                                    }
                                }
                                0 < this.cursorAlpha && (u = this.line, s ? u.translate(0, p + h) : u.translate(p, 0), u.show());
                                this.linePos = s ? p + h : p;
                                A && (s ? this.updateSelectionSize(NaN, p) : this.updateSelectionSize(p, NaN));
                                u = !0;
                                A && (u = !1);
                                this.categoryBalloonEnabled && u ? (s ? (q && ("right" == x ? v.setBounds(k, l + h, k + m + g, l + p + h) : v.setBounds(k, l + h, k + m + g, l + p)), "right" == x ? q ? v.setPosition(k + m + g, l + p + h) : v.setPosition(k + m + g + H, l + p + h) : q ? v.setPosition(k, l + p) : v.setPosition(k - H, l + p)) : "top" == x ? q ? v.setPosition(k + p + g, l + h) : v.setPosition(k + p + g, l + h - H + 1) : q ? v.setPosition(k + p, l + n) : v.setPosition(k + p, l + n + H - 1), f.parseDates ? (f = AmCharts.formatDate(r.category, this.categoryBalloonDateFormat), -1 != f.indexOf("fff") && (f = AmCharts.formatMilliseconds(f, r.category)), v.showBalloon(f)) : v.showBalloon(r.category)) : v.hide();
                                G && this.bulletsEnabled && this.showBullets();
                                this.destroyValueBalloons();
                                if (G && this.valueBalloonsEnabled && u && c.balloon.enabled) {
                                    this.valueBalloons = u = [];
                                    if (this.oneBalloonOnly) {
                                        h = Infinity;
                                        for (f = 0; f < G.length; f++) t = G[f],
                                        t.showBalloon && (!t.hidden && t.balloonText) && (v = r.axes[t.valueAxis.id].graphs[t.id], w = v.y, isNaN(w) || (s ? Math.abs(d - w) < h && (h = Math.abs(d - w), O = t) : Math.abs(e - w) < h && (h = Math.abs(e - w), O = t)));
                                        this.mostCloseGraph && (O = this.mostCloseGraph)
                                    }
                                    for (f = 0; f < G.length; f++) if (t = G[f], (!this.oneBalloonOnly || t == O) && (t.showBalloon && !t.hidden && t.balloonText) && (v = r.axes[t.valueAxis.id].graphs[t.id], w = v.y, !isNaN(w))) {
                                        p = v.x;
                                        q = !0;
                                        if (s) {
                                            if (h = w, 0 > p || p > n) q = !1
                                        } else if (h = p, p = w, 0 > h || h > m + g) q = !1;
                                        q && (q = t.valueBalloon, x = c.getBalloonColor(t, v), q.setBounds(k, l, k + m, l + n), q.pointerOrientation = "H", q.changeColor(x), void 0 !== t.balloonAlpha && (q.fillAlpha = t.balloonAlpha), void 0 !== t.balloonTextColor && (q.color = t.balloonTextColor), q.setPosition(h + k, p + l), t = c.formatString(t.balloonText, v, t), "" !== t && q.showBalloon(t), !s && q.set && q.set.hide(), u.push({
                                            yy: w,
                                            balloon: q
                                        }))
                                    }
                                    s || this.arrangeBalloons()
                                }
                                b ? (g = {
                                    type: "changed"
                                }, g.index = a, g.target = this, g.chart = this.chart, g.zooming = A, g.mostCloseGraph = O, g.position = s ? e : d, g.target = this, c.fire("changed", g), this.fire("changed", g), this.skipZoomDispatch = !1) : (this.skipZoomDispatch = !0, c.updateLegendValues(a));
                                this.previousIndex = a
                            }
                    }
            } else this.hideCursor()
    },
    enableDrawing: function (a) {
        this.enabled = !a;
        this.hideCursor();
        this.rolledOver = !1;
        this.drawing = a
    },
    isZooming: function (a) {
        a && a != this.zooming && this.handleMouseDown("fake");
        a || a == this.zooming || this.handleMouseUp()
    },
    handleMouseOut: function () {
        if (this.enabled) if (this.zooming) this.setPosition();
        else {
            this.index = void 0;
            var a = {
                type: "changed",
                index: void 0,
                target: this
            };
            a.chart = this.chart;
            this.fire("changed", a);
            this.hideCursor()
        }
    },
    handleReleaseOutside: function () {
        this.handleMouseUp()
    },
    handleMouseUp: function () {
        var a = this.chart,
            b = this.data,
            c;
        if (a) {
                var d = a.mouseX - this.x,
                    e = a.mouseY - this.y;
                if (this.drawingNow) {
                        this.drawingNow = !1;
                        AmCharts.remove(this.drawingLine);
                        c = this.drawStartX;
                        var f = this.drawStartY;
                        if (2 < Math.abs(c - d) || 2 < Math.abs(f - e)) c = {
                            type: "draw",
                            target: this,
                            chart: a,
                            initialX: c,
                            initialY: f,
                            finalX: d,
                            finalY: e
                        },
                        this.fire(c.type, c)
                    }
                if (this.enabled && 0 < b.length) {
                        if (this.pan) this.rolledOver = !1;
                        else if (this.zoomable && this.zooming) {
                            c = this.selectWithoutZooming ? {
                                type: "selected"
                            } : {
                                type: "zoomed"
                            };
                            c.target = this;
                            c.chart = a;
                            if ("cursor" == this.type) this.rotate ? this.selectionPosY = e : this.selectionPosX = e = d,
                            2 > Math.abs(e - this.initialMouse) && this.fromIndex == this.index || (this.index < this.fromIndex ? (c.end = this.fromIndex, c.start = this.index) : (c.end = this.index, c.start = this.fromIndex), e = a.categoryAxis, e.parseDates && !e.equalSpacing && (c.start = b[c.start].time, c.end = a.getEndTime(b[c.end].time)), this.skipZoomDispatch || this.fire(c.type, c));
                            else {
                                var g = this.initialMouseX,
                                    h = this.initialMouseY;
                                3 > Math.abs(d - g) && 3 > Math.abs(e - h) || (b = Math.min(g, d), f = Math.min(h, e), d = Math.abs(g - d), e = Math.abs(h - e), a.hideXScrollbar && (b = 0, d = this.width), a.hideYScrollbar && (f = 0, e = this.height), c.selectionHeight = e, c.selectionWidth = d, c.selectionY = f, c.selectionX = b, this.skipZoomDispatch || this.fire(c.type, c))
                            }
                            this.selectWithoutZooming || AmCharts.remove(this.selection)
                        }
                        this.panning = this.zooming = this.skipZoomDispatch = !1
                    }
            }
    },
    showCursorAt: function (a) {
        var b = this.chart.categoryAxis;
        a = b.parseDates ? b.dateToCoordinate(a) : b.categoryToCoordinate(a);
        this.previousMousePosition = NaN;
        this.forceShow = !0;
        this.setPosition(a, !1)
    },
    handleMouseDown: function (a) {
        if (this.zoomable || this.pan || this.drawing) {
            var b = this.rotate,
                c = this.chart,
                d = c.mouseX - this.x,
                e = c.mouseY - this.y;
            if (0 < d && d < this.width && 0 < e && e < this.height || "fake" == a) this.setPosition(),
            this.selectWithoutZooming && AmCharts.remove(this.selection),
            this.drawing ? (this.drawStartY = e, this.drawStartX = d, this.drawingNow = !0) : this.pan ? (this.zoomable = !1, c.setMouseCursor("move"), this.panning = !0, this.panClickPos = b ? e : d, this.panClickStart = this.start, this.panClickEnd = this.end, this.panClickStartTime = this.startTime, this.panClickEndTime = this.endTime) : this.zoomable && ("cursor" == this.type ? (this.fromIndex = this.index, b ? (this.initialMouse = e, this.selectionPosY = this.linePos) : (this.initialMouse = d, this.selectionPosX = this.linePos)) : (this.initialMouseX = d, this.initialMouseY = e, this.selectionPosX = d, this.selectionPosY = e), this.zooming = !0)
        }
    }
});
AmCharts.SimpleChartScrollbar = AmCharts.Class({
    construct: function () {
        this.createEvents("zoomed");
        this.backgroundColor = "#D4D4D4";
        this.backgroundAlpha = 1;
        this.selectedBackgroundColor = "#EFEFEF";
        this.scrollDuration = this.selectedBackgroundAlpha = 1;
        this.resizeEnabled = !0;
        this.hideResizeGrips = !1;
        this.scrollbarHeight = 20;
        this.updateOnReleaseOnly = !1;
        9 > document.documentMode && (this.updateOnReleaseOnly = !0);
        this.dragIconWidth = 11;
        this.dragIconHeight = 18
    },
    draw: function () {
        var a = this;
        a.destroy();
        a.interval = setInterval(function () {
            a.updateScrollbar.call(a)
        }, 40);
        var b = a.chart.container,
            c = a.rotate,
            d = a.chart,
            e = b.set();
        a.set = e;
        d.scrollbarsSet.push(e);
        var f, g;
        c ? (f = a.scrollbarHeight, g = d.plotAreaHeight) : (g = a.scrollbarHeight, f = d.plotAreaWidth);
        a.width = f;
        if ((a.height = g) && f) {
                var h = AmCharts.rect(b, f, g, a.backgroundColor, a.backgroundAlpha);
                a.bg = h;
                e.push(h);
                h = AmCharts.rect(b, f, g, "#000", 0.005);
                e.push(h);
                a.invisibleBg = h;
                h.click(function () {
                    a.handleBgClick()
                }).mouseover(function () {
                    a.handleMouseOver()
                }).mouseout(function () {
                    a.handleMouseOut()
                }).touchend(function () {
                    a.handleBgClick()
                });
                h = AmCharts.rect(b, f, g, a.selectedBackgroundColor, a.selectedBackgroundAlpha);
                a.selectedBG = h;
                e.push(h);
                f = AmCharts.rect(b, f, g, "#000", 0.005);
                a.dragger = f;
                e.push(f);
                f.mousedown(function (b) {
                    a.handleDragStart(b)
                }).mouseup(function () {
                    a.handleDragStop()
                }).mouseover(function () {
                    a.handleDraggerOver()
                }).mouseout(function () {
                    a.handleMouseOut()
                }).touchstart(function (b) {
                    a.handleDragStart(b)
                }).touchend(function () {
                    a.handleDragStop()
                });
                f = d.pathToImages;
                c ? (h = f + "dragIconH.gif", f = a.dragIconWidth, c = a.dragIconHeight) : (h = f + "dragIcon.gif", c = a.dragIconWidth, f = a.dragIconHeight);
                g = b.image(h, 0, 0, c, f);
                var h = b.image(h, 0, 0, c, f),
                    k = 10,
                    l = 20;
                d.panEventsEnabled && (k = 25, l = a.scrollbarHeight);
                var m = AmCharts.rect(b, k, l, "#000", 0.005),
                    n = AmCharts.rect(b, k, l, "#000", 0.005);
                n.translate(-(k - c) / 2, -(l - f) / 2);
                m.translate(-(k - c) / 2, -(l - f) / 2);
                c = b.set([g, n]);
                b = b.set([h, m]);
                a.iconLeft = c;
                e.push(a.iconLeft);
                a.iconRight = b;
                e.push(b);
                c.mousedown(function () {
                        a.leftDragStart()
                    }).mouseup(function () {
                        a.leftDragStop()
                    }).mouseover(function () {
                        a.iconRollOver()
                    }).mouseout(function () {
                        a.iconRollOut()
                    }).touchstart(function (b) {
                        a.leftDragStart()
                    }).touchend(function () {
                        a.leftDragStop()
                    });
                b.mousedown(function () {
                        a.rightDragStart()
                    }).mouseup(function () {
                        a.rightDragStop()
                    }).mouseover(function () {
                        a.iconRollOver()
                    }).mouseout(function () {
                        a.iconRollOut()
                    }).touchstart(function (b) {
                        a.rightDragStart()
                    }).touchend(function () {
                        a.rightDragStop()
                    });
                AmCharts.ifArray(d.chartData) ? e.show() : e.hide();
                a.hideDragIcons()
            }
        e.translate(a.x, a.y);
        a.clipDragger(!1)
    },
    updateScrollbarSize: function (a, b) {
        var c = this.dragger,
            d, e, f, g;
        this.rotate ? (d = 0, e = a, f = this.width + 1, g = b - a, c.setAttr("height", b - a), c.setAttr("y", e)) : (d = a, e = 0, f = b - a, g = this.height + 1, c.setAttr("width", b - a), c.setAttr("x", d));
        this.clipAndUpdate(d, e, f, g)
    },
    updateScrollbar: function () {
        var a, b = !1,
            c, d, e = this.x,
            f = this.y,
            g = this.dragger,
            h = this.getDBox();
        c = h.x + e;
        d = h.y + f;
        var k = h.width,
            h = h.height,
            l = this.rotate,
            m = this.chart,
            n = this.width,
            r = this.height,
            p = m.mouseX,
            s = m.mouseY;
        a = this.initialMouse;
        m.mouseIsOver && (this.dragging && (m = this.initialCoord, l ? (a = m + (s - a), 0 > a && (a = 0), m = r - h, a > m && (a = m), g.setAttr("y", a)) : (a = m + (p - a), 0 > a && (a = 0), m = n - k, a > m && (a = m), g.setAttr("x", a))), this.resizingRight && (l ? (a = s - d, a + d > r + f && (a = r - d + f), 0 > a ? (this.resizingRight = !1, b = this.resizingLeft = !0) : (0 === a && (a = 0.1), g.setAttr("height", a))) : (a = p - c, a + c > n + e && (a = n - c + e), 0 > a ? (this.resizingRight = !1, b = this.resizingLeft = !0) : (0 === a && (a = 0.1), g.setAttr("width", a)))), this.resizingLeft && (l ? (c = d, d = s, d < f && (d = f), d > r + f && (d = r + f), a = !0 === b ? c - d : h + c - d, 0 > a ? (this.resizingRight = !0, this.resizingLeft = !1, g.setAttr("y", c + h - f)) : (0 === a && (a = 0.1), g.setAttr("y", d - f), g.setAttr("height", a))) : (d = p, d < e && (d = e), d > n + e && (d = n + e), a = !0 === b ? c - d : k + c - d, 0 > a ? (this.resizingRight = !0, this.resizingLeft = !1, g.setAttr("x", c + k - e)) : (0 === a && (a = 0.1), g.setAttr("x", d - e), g.setAttr("width", a)))), this.clipDragger(!0))
    },
    clipDragger: function (a) {
        var b = this.getDBox(),
            c = b.x,
            d = b.y,
            e = b.width,
            b = b.height,
            f = !1;
        if (this.rotate) {
                if (c = 0, e = this.width + 1, this.clipY != d || this.clipH != b) f = !0
            } else if (d = 0, b = this.height + 1, this.clipX != c || this.clipW != e) f = !0;
        f && (this.clipAndUpdate(c, d, e, b), a && (this.updateOnReleaseOnly || this.dispatchScrollbarEvent()))
    },
    maskGraphs: function () {},
    clipAndUpdate: function (a, b, c, d) {
        this.clipX =
        a;
        this.clipY = b;
        this.clipW = c;
        this.clipH = d;
        this.selectedBG.clipRect(a, b, c, d);
        this.updateDragIconPositions();
        this.maskGraphs(a, b, c, d)
    },
    dispatchScrollbarEvent: function () {
        if (this.skipEvent) this.skipEvent = !1;
        else {
            var a = this.chart;
            a.hideBalloon();
            var b = this.getDBox(),
                c = b.x,
                d = b.y,
                e = b.width,
                b = b.height;
            this.rotate ? (c = d, e = this.height / b) : e = this.width / e;
            a = {
                    type: "zoomed",
                    position: c,
                    chart: a,
                    target: this,
                    multiplier: e
                };
            this.fire(a.type, a)
        }
    },
    updateDragIconPositions: function () {
        var a = this.getDBox(),
            b = a.x,
            c = a.y,
            d = this.iconLeft,
            e = this.iconRight,
            f, g, h = this.scrollbarHeight;
        this.rotate ? (f = this.dragIconWidth, g = this.dragIconHeight, d.translate((h - g) / 2, c - f / 2), e.translate((h - g) / 2, c + a.height - f / 2)) : (f = this.dragIconHeight, g = this.dragIconWidth, d.translate(b - g / 2, (h - f) / 2), e.translate(b + -g / 2 + a.width, (h - f) / 2))
    },
    showDragIcons: function () {
        this.resizeEnabled && (this.iconLeft.show(), this.iconRight.show())
    },
    hideDragIcons: function () {
        this.resizingLeft || (this.resizingRight || this.dragging) || (this.hideResizeGrips && (this.iconLeft.hide(), this.iconRight.hide()), this.removeCursors())
    },
    removeCursors: function () {
        this.chart.setMouseCursor("auto")
    },
    relativeZoom: function (a, b) {
        this.dragger.stop();
        this.multiplier = a;
        this.position = b;
        this.updateScrollbarSize(b, this.rotate ? b + this.height / a : b + this.width / a)
    },
    destroy: function () {
        this.clear();
        AmCharts.remove(this.set)
    },
    clear: function () {
        clearInterval(this.interval)
    },
    handleDragStart: function () {
        var a = this.chart;
        this.dragger.stop();
        this.removeCursors();
        this.dragging = !0;
        var b = this.getDBox();
        this.rotate ? (this.initialCoord = b.y, this.initialMouse =
        a.mouseY) : (this.initialCoord = b.x, this.initialMouse = a.mouseX)
    },
    handleDragStop: function () {
        this.updateOnReleaseOnly && (this.updateScrollbar(), this.skipEvent = !1, this.dispatchScrollbarEvent());
        this.dragging = !1;
        this.mouseIsOver && this.removeCursors();
        this.updateScrollbar()
    },
    handleDraggerOver: function () {
        this.handleMouseOver()
    },
    leftDragStart: function () {
        this.dragger.stop();
        this.resizingLeft = !0
    },
    leftDragStop: function () {
        this.resizingLeft = !1;
        this.mouseIsOver || this.removeCursors();
        this.updateOnRelease()
    },
    rightDragStart: function () {
        this.dragger.stop();
        this.resizingRight = !0
    },
    rightDragStop: function () {
        this.resizingRight = !1;
        this.mouseIsOver || this.removeCursors();
        this.updateOnRelease()
    },
    iconRollOut: function () {
        this.removeCursors()
    },
    iconRollOver: function () {
        this.rotate ? this.chart.setMouseCursor("n-resize") : this.chart.setMouseCursor("e-resize");
        this.handleMouseOver()
    },
    getDBox: function () {
        return this.dragger.getBBox()
    },
    handleBgClick: function () {
        if (!this.resizingRight && !this.resizingLeft) {
            this.zooming = !0;
            var a, b, c = this.scrollDuration,
                d = this.dragger;
            a = this.getDBox();
            var e = a.height,
                f = a.width;
            b = this.chart;
            var g = this.y,
                h = this.x,
                k = this.rotate;
            k ? (a = "y", b = b.mouseY - e / 2 - g, b = AmCharts.fitToBounds(b, 0, this.height - e)) : (a = "x", b = b.mouseX - f / 2 - h, b = AmCharts.fitToBounds(b, 0, this.width - f));
            this.updateOnReleaseOnly ? (this.skipEvent = !1, d.setAttr(a, b), this.dispatchScrollbarEvent(), this.clipDragger()) : (b = Math.round(b), k ? d.animate({
                    y: b
                }, c, ">") : d.animate({
                    x: b
                }, c, ">"))
        }
    },
    updateOnRelease: function () {
        this.updateOnReleaseOnly && (this.updateScrollbar(), this.skipEvent = !1, this.dispatchScrollbarEvent())
    },
    handleReleaseOutside: function () {
        if (this.set) {
            if (this.resizingLeft || this.resizingRight || this.dragging) this.updateOnRelease(),
            this.removeCursors();
            this.mouseIsOver = this.dragging = this.resizingRight = this.resizingLeft = !1;
            this.hideDragIcons();
            this.updateScrollbar()
        }
    },
    handleMouseOver: function () {
        this.mouseIsOver = !0;
        this.showDragIcons()
    },
    handleMouseOut: function () {
        this.mouseIsOver = !1;
        this.hideDragIcons()
    }
});
AmCharts.ChartScrollbar = AmCharts.Class({
    inherits: AmCharts.SimpleChartScrollbar,
    construct: function () {
        AmCharts.ChartScrollbar.base.construct.call(this);
        this.graphLineColor = "#BBBBBB";
        this.graphLineAlpha = 0;
        this.graphFillColor = "#BBBBBB";
        this.graphFillAlpha = 1;
        this.selectedGraphLineColor = "#888888";
        this.selectedGraphLineAlpha = 0;
        this.selectedGraphFillColor = "#888888";
        this.selectedGraphFillAlpha = 1;
        this.gridCount = 0;
        this.gridColor = "#FFFFFF";
        this.gridAlpha = 0.7;
        this.skipEvent = this.autoGridCount = !1;
        this.color = "#FFFFFF";
        this.scrollbarCreated = !1
    },
    init: function () {
        var a = this.categoryAxis,
            b = this.chart;
        a || (this.categoryAxis = a = new AmCharts.CategoryAxis);
        a.chart = b;
        a.id = "scrollbar";
        a.dateFormats = b.categoryAxis.dateFormats;
        a.boldPeriodBeginning = b.categoryAxis.boldPeriodBeginning;
        a.axisItemRenderer = AmCharts.RecItem;
        a.axisRenderer = AmCharts.RecAxis;
        a.guideFillRenderer = AmCharts.RecFill;
        a.inside = !0;
        a.fontSize = this.fontSize;
        a.tickLength = 0;
        a.axisAlpha = 0;
        this.graph && (a = this.valueAxis, a || (this.valueAxis = a = new AmCharts.ValueAxis, a.visible = !1, a.scrollbar = !0, a.axisItemRenderer = AmCharts.RecItem, a.axisRenderer = AmCharts.RecAxis, a.guideFillRenderer = AmCharts.RecFill, a.labelsEnabled = !1, a.chart = b), b = this.unselectedGraph, b || (b = new AmCharts.AmGraph, b.scrollbar = !0, this.unselectedGraph = b, b.negativeBase = this.graph.negativeBase), b = this.selectedGraph, b || (b = new AmCharts.AmGraph, b.scrollbar = !0, this.selectedGraph = b, b.negativeBase = this.graph.negativeBase));
        this.scrollbarCreated = !0
    },
    draw: function () {
        var a = this;
        AmCharts.ChartScrollbar.base.draw.call(a);
        a.scrollbarCreated || a.init();
        var b = a.chart,
            c = b.chartData,
            d = a.categoryAxis,
            e = a.rotate,
            f = a.x,
            g = a.y,
            h = a.width,
            k = a.height,
            l = b.categoryAxis,
            m = a.set;
        d.setOrientation(!e);
        d.parseDates = l.parseDates;
        d.rotate = e;
        d.equalSpacing = l.equalSpacing;
        d.minPeriod = l.minPeriod;
        d.startOnAxis = l.startOnAxis;
        d.viW = h;
        d.viH = k;
        d.width = h;
        d.height = k;
        d.gridCount = a.gridCount;
        d.gridColor = a.gridColor;
        d.gridAlpha = a.gridAlpha;
        d.color = a.color;
        d.autoGridCount = a.autoGridCount;
        d.parseDates && !d.equalSpacing && d.timeZoom(b.firstTime, b.lastTime);
        d.zoom(0, c.length - 1);
        if (l = a.graph) {
                var n = a.valueAxis,
                    r = l.valueAxis;
                n.id = r.id;
                n.rotate = e;
                n.setOrientation(e);
                n.width = h;
                n.height = k;
                n.viW = h;
                n.viH = k;
                n.dataProvider = c;
                n.reversed = r.reversed;
                n.logarithmic = r.logarithmic;
                n.gridAlpha = 0;
                n.axisAlpha = 0;
                m.push(n.set);
                e ? n.y = g : n.x = f;
                var f = Infinity,
                    g = -Infinity,
                    p;
                for (p = 0; p < c.length; p++) {
                        var s = c[p].axes[r.id].graphs[l.id].values,
                            q;
                        for (q in s) if (s.hasOwnProperty(q) && "percents" != q && "total" != q) {
                                var t = s[q];
                                t < f && (f = t);
                                t > g && (g = t)
                            }
                    }
                Infinity != f && (n.minimum = f); - Infinity != g && (n.maximum = g + 0.1 * (g - f));
                f == g && (n.minimum -= 1, n.maximum += 1);
                void 0 != a.minimum && (n.minimum = a.minimum);
                void 0 != a.maximum && (n.maximum = a.maximum);
                n.zoom(0, c.length - 1);
                q = a.unselectedGraph;
                q.id = l.id;
                q.rotate = e;
                q.chart = b;
                q.chartType = b.chartType;
                q.data = c;
                q.valueAxis = n;
                q.chart = l.chart;
                q.categoryAxis = a.categoryAxis;
                q.valueField = l.valueField;
                q.openField = l.openField;
                q.closeField = l.closeField;
                q.highField = l.highField;
                q.lowField = l.lowField;
                q.lineAlpha = a.graphLineAlpha;
                q.lineColor = a.graphLineColor;
                q.fillAlphas = a.graphFillAlpha;
                q.fillColors = a.graphFillColor;
                q.connect = l.connect;
                q.hidden = l.hidden;
                q.width = h;
                q.height = k;
                r = a.selectedGraph;
                r.id = l.id;
                r.rotate = e;
                r.chart = b;
                r.chartType = b.chartType;
                r.data = c;
                r.valueAxis = n;
                r.chart = l.chart;
                r.categoryAxis = d;
                r.valueField = l.valueField;
                r.openField = l.openField;
                r.closeField = l.closeField;
                r.highField = l.highField;
                r.lowField = l.lowField;
                r.lineAlpha = a.selectedGraphLineAlpha;
                r.lineColor = a.selectedGraphLineColor;
                r.fillAlphas = a.selectedGraphFillAlpha;
                r.fillColors = a.selectedGraphFillColor;
                r.connect = l.connect;
                r.hidden = l.hidden;
                r.width = h;
                r.height = k;
                b = a.graphType;
                b || (b = l.type);
                q.type = b;
                r.type = b;
                c = c.length - 1;
                q.zoom(0, c);
                r.zoom(0, c);
                r.set.click(function () {
                        a.handleBackgroundClick()
                    }).mouseover(function () {
                        a.handleMouseOver()
                    }).mouseout(function () {
                        a.handleMouseOut()
                    });
                q.set.click(function () {
                        a.handleBackgroundClick()
                    }).mouseover(function () {
                        a.handleMouseOver()
                    }).mouseout(function () {
                        a.handleMouseOut()
                    });
                m.push(q.set);
                m.push(r.set)
            }
        m.push(d.set);
        m.push(d.labelsSet);
        a.bg.toBack();
        a.invisibleBg.toFront();
        a.dragger.toFront();
        a.iconLeft.toFront();
        a.iconRight.toFront()
    },
    timeZoom: function (a, b) {
        this.startTime = a;
        this.endTime = b;
        this.timeDifference = b - a;
        this.skipEvent = !0;
        this.zoomScrollbar()
    },
    zoom: function (a, b) {
        this.start = a;
        this.end = b;
        this.skipEvent = !0;
        this.zoomScrollbar()
    },
    dispatchScrollbarEvent: function () {
        if (this.skipEvent) this.skipEvent = !1;
        else {
            var a = this.chart.chartData,
                b, c, d = this.dragger.getBBox();
            b = d.x;
            c = d.y;
            var e = d.width,
                f = d.height,
                d = this.chart;
            this.rotate ? (b = c, c = f) : c = e;
            e = {
                    type: "zoomed",
                    target: this
                };
            e.chart = d;
            var f = this.categoryAxis,
                g = this.stepWidth;
            if (f.parseDates && !f.equalSpacing) {
                    if (a = d.firstTime, f.minDuration(), d = Math.round(b / g) + a, a = this.dragging ? d + this.timeDifference : Math.round((b + c) / g) + a, d > a && (d = a), d != this.startTime || a != this.endTime) this.startTime = d,
                    this.endTime = a,
                    e.start = d,
                    e.end = a,
                    e.startDate = new Date(d),
                    e.endDate = new Date(a),
                    this.fire(e.type, e)
                } else if (f.startOnAxis || (b += g / 2), c -= this.stepWidth / 2, d = f.xToIndex(b), b = f.xToIndex(b + c), d != this.start || this.end != b) f.startOnAxis && (this.resizingRight && d == b && b++, this.resizingLeft && d == b && (0 < d ? d-- : b = 1)),
            this.start = d,
            this.end = this.dragging ? this.start + this.difference : b,
            e.start = this.start,
            e.end = this.end,
            f.parseDates && (a[this.start] && (e.startDate = new Date(a[this.start].time)), a[this.end] && (e.endDate = new Date(a[this.end].time))),
            this.fire(e.type, e)
        }
    },
    zoomScrollbar: function () {
        var a, b;
        a = this.chart;
        var c = a.chartData,
            d = this.categoryAxis;
        d.parseDates && !d.equalSpacing ? (c = d.stepWidth, d = a.firstTime, a = c * (this.startTime - d), b = c * (this.endTime - d)) : (a = c[this.start].x[d.id], b = c[this.end].x[d.id], c = d.stepWidth, d.startOnAxis || (d = c / 2, a -= d, b += d));
        this.stepWidth = c;
        this.updateScrollbarSize(a, b)
    },
    maskGraphs: function (a, b, c, d) {
        var e = this.selectedGraph;
        e && e.set.clipRect(a, b, c, d)
    },
    handleDragStart: function () {
        AmCharts.ChartScrollbar.base.handleDragStart.call(this);
        this.difference = this.end - this.start;
        this.timeDifference = this.endTime - this.startTime;
        0 > this.timeDifference && (this.timeDifference = 0)
    },
    handleBackgroundClick: function () {
        AmCharts.ChartScrollbar.base.handleBackgroundClick.call(this);
        this.dragging || (this.difference = this.end - this.start, this.timeDifference = this.endTime - this.startTime, 0 > this.timeDifference && (this.timeDifference = 0))
    }
});
AmCharts.circle = function (a, b, c, d, e, f, g, h) {
    if (void 0 == e || 0 === e) e = 1;
    void 0 === f && (f = "#000000");
    void 0 === g && (g = 0);
    d = {
        fill: c,
        stroke: f,
        "fill-opacity": d,
        "stroke-width": e,
        "stroke-opacity": g
    };
    a = a.circle(0, 0, b).attr(d);
    h && a.gradient("radialGradient", [c, AmCharts.adjustLuminosity(c, -0.6)]);
    return a
};
AmCharts.text = function (a, b, c, d, e, f, g, h) {
    f || (f = "middle");
    "right" == f && (f = "end");
    AmCharts.isIE && 9 > AmCharts.IEversion && (b = b.replace("&amp;", "&"), b = b.replace("&", "&amp;"));
    c = {
        fill: c,
        "font-family": d,
        "font-size": e,
        opacity: h
    };
    !0 === g && (c["font-weight"] = "bold");
    c["text-anchor"] = f;
    return a.text(b, c)
};
AmCharts.polygon = function (a, b, c, d, e, f, g, h, k) {
    isNaN(f) && (f = 0);
    isNaN(h) && (h = e);
    var l = d,
        m = !1;
    "object" == typeof l && 1 < l.length && (m = !0, l = l[0]);
    void 0 === g && (g = l);
    e = {
            fill: l,
            stroke: g,
            "fill-opacity": e,
            "stroke-width": f,
            "stroke-opacity": h
        };
    f = AmCharts.dx;
    g = AmCharts.dy;
    h = Math.round;
    var l = "M" + (h(b[0]) + f) + "," + (h(c[0]) + g),
        n;
    for (n = 1; n < b.length; n++) l += " L" + (h(b[n]) + f) + "," + (h(c[n]) + g);
    a = a.path(l + " Z").attr(e);
    m && a.gradient("linearGradient", d, k);
    return a
};
AmCharts.rect = function (a, b, c, d, e, f, g, h, k, l) {
    isNaN(f) && (f = 0);
    void 0 === k && (k = 0);
    void 0 === l && (l = 270);
    isNaN(e) && (e = 0);
    var m = d,
        n = !1;
    "object" == typeof m && (m = m[0], n = !0);
    void 0 === g && (g = m);
    void 0 === h && (h = e);
    b = Math.round(b);
    c = Math.round(c);
    var r = 0,
        p = 0;
    0 > b && (b = Math.abs(b), r = -b);
    0 > c && (c = Math.abs(c), p = -c);
    r += AmCharts.dx;
    p += AmCharts.dy;
    e = {
            fill: m,
            stroke: g,
            "fill-opacity": e,
            "stroke-opacity": h
        };
    a = a.rect(r, p, b, c, k, f).attr(e);
    n && a.gradient("linearGradient", d, l);
    return a
};
AmCharts.triangle = function (a, b, c, d, e, f, g, h) {
    if (void 0 === f || 0 === f) f = 1;
    void 0 === g && (g = "#000");
    void 0 === h && (h = 0);
    d = {
        fill: d,
        stroke: g,
        "fill-opacity": e,
        "stroke-width": f,
        "stroke-opacity": h
    };
    b /= 2;
    var k;
    0 === c && (k = " M" + -b + "," + b + " L0," + -b + " L" + b + "," + b + " Z");
    180 == c && (k = " M" + -b + "," + -b + " L0," + b + " L" + b + "," + -b + " Z");
    90 == c && (k = " M" + -b + "," + -b + " L" + b + ",0 L" + -b + "," + b + " Z");
    270 == c && (k = " M" + -b + ",0 L" + b + "," + b + " L" + b + "," + -b + " Z");
    return a.path(k).attr(d)
};
AmCharts.line = function (a, b, c, d, e, f, g, h, k, l) {
    f = {
        fill: "none",
        "stroke-width": f
    };
    void 0 !== g && 0 < g && (f["stroke-dasharray"] = g);
    isNaN(e) || (f["stroke-opacity"] = e);
    d && (f.stroke = d);
    d = Math.round;
    l && (d = AmCharts.doNothing);
    l = AmCharts.dx;
    e = AmCharts.dy;
    g = "M" + (d(b[0]) + l) + "," + (d(c[0]) + e);
    for (h = 1; h < b.length; h++) g += " L" + (d(b[h]) + l) + "," + (d(c[h]) + e);
    if (AmCharts.VML) return a.path(g, void 0, !0).attr(f);
    k && (g += " M0,0 L0,0");
    return a.path(g).attr(f)
};
AmCharts.doNothing = function (a) {
    return a
};
AmCharts.wedge = function (a, b, c, d, e, f, g, h, k, l, m) {
    var n = Math.round;
    f = n(f);
    g = n(g);
    h = n(h);
    var r = n(g / f * h),
        p = AmCharts.VML,
        s = -359.5 - f / 100; - 359.94 > s && (s = -359.94);
    e <= s && (e = s);
    var q = 1 / 180 * Math.PI,
        s = b + Math.cos(d * q) * h,
        t = c + Math.sin(-d * q) * r,
        v = b + Math.cos(d * q) * f,
        u = c + Math.sin(-d * q) * g,
        w = b + Math.cos((d + e) * q) * f,
        y = c + Math.sin((-d - e) * q) * g,
        x = b + Math.cos((d + e) * q) * h,
        q = c + Math.sin((-d - e) * q) * r,
        A = {
            fill: AmCharts.adjustLuminosity(l.fill, -0.2),
            "stroke-opacity": 0
        },
        z = 0;
    180 < Math.abs(e) && (z = 1);
    d = a.set();
    var G;
    p && (s = n(10 * s), v = n(10 * v), w =
        n(10 * w), x = n(10 * x), t = n(10 * t), u = n(10 * u), y = n(10 * y), q = n(10 * q), b = n(10 * b), k = n(10 * k), c = n(10 * c), f *= 10, g *= 10, h *= 10, r *= 10, 1 > Math.abs(e) && (1 >= Math.abs(w - v) && 1 >= Math.abs(y - u)) && (G = !0));
    e = "";
    if (0 < k) {
            p ? (path = " M" + s + "," + (t + k) + " L" + v + "," + (u + k), G || (path += " A" + (b - f) + "," + (k + c - g) + "," + (b + f) + "," + (k + c + g) + "," + v + "," + (u + k) + "," + w + "," + (y + k)), path += " L" + x + "," + (q + k), 0 < h && (G || (path += " B" + (b - h) + "," + (k + c - r) + "," + (b + h) + "," + (k + c + r) + "," + x + "," + (k + q) + "," + s + "," + (k + t)))) : (path = " M" + s + "," + (t + k) + " L" + v + "," + (u + k), path += " A" + f + "," + g + ",0," + z + ",1," + w + "," + (y + k) + " L" + x + "," + (q + k), 0 < h && (path += " A" + h + "," + r + ",0," + z + ",0," + s + "," + (t + k)));
            path += " Z";
            var H = a.path(path, void 0, void 0, "1000,1000").attr(A);
            d.push(H);
            H = a.path(" M" + s + "," + t + " L" + s + "," + (t + k) + " L" + v + "," + (u + k) + " L" + v + "," + u + " L" + s + "," + t + " Z", void 0, void 0, "1000,1000").attr(A);
            k = a.path(" M" + w + "," + y + " L" + w + "," + (y + k) + " L" + x + "," + (q + k) + " L" + x + "," + q + " L" + w + "," + y + " Z", void 0, void 0, "1000,1000").attr(A);
            d.push(H);
            d.push(k)
        }
    p ? (G || (e = " A" + n(b - f) + "," + n(c - g) + "," + n(b + f) + "," + n(c + g) + "," + n(v) + "," + n(u) + "," + n(w) + "," + n(y)), f = " M" + n(s) + "," + n(t) + " L" + n(v) + "," + n(u) + e + " L" + n(x) + "," + n(q)) : f = " M" + s + "," + t + " L" + v + "," + u + (" A" + f + "," + g + ",0," + z + ",1," + w + "," + y) + " L" + x + "," + q;
    0 < h && (p ? G || (f += " B" + (b - h) + "," + (c - r) + "," + (b + h) + "," + (c + r) + "," + x + "," + q + "," + s + "," + t) : f += " A" + h + "," + r + ",0," + z + ",0," + s + "," + t);
    a = a.path(f + " Z", void 0, void 0, "1000,1000").attr(l);
    if (m) {
            b = [];
            for (c = 0; c < m.length; c++) b.push(AmCharts.adjustLuminosity(l.fill, m[c]));
            0 < b.length && a.gradient("linearGradient", b)
        }
    d.push(a);
    return d
};
AmCharts.adjustLuminosity = function (a, b) {
    a = String(a).replace(/[^0-9a-f]/gi, "");
    6 > a.length && (a = String(a[0]) + String(a[0]) + String(a[1]) + String(a[1]) + String(a[2]) + String(a[2]));
    b = b || 0;
    var c = "#",
        d, e;
    for (e = 0; 3 > e; e++) d = parseInt(a.substr(2 * e, 2), 16),
    d = Math.round(Math.min(Math.max(0, d + d * b), 255)).toString(16),
    c += ("00" + d).substr(d.length);
    return c
};
AmCharts.AmPieChart = AmCharts.Class({
    inherits: AmCharts.AmChart,
    construct: function () {
        this.createEvents("rollOverSlice", "rollOutSlice", "clickSlice", "pullOutSlice", "pullInSlice", "rightClickSlice");
        AmCharts.AmPieChart.base.construct.call(this);
        this.colors = "#FF0F00 #FF6600 #FF9E01 #FCD202 #F8FF01 #B0DE09 #04D215 #0D8ECF #0D52D1 #2A0CD0 #8A0CCF #CD0D74 #754DEB #DDDDDD #999999 #333333 #000000 #57032A #CA9726 #990000 #4B0C25".split(" ");
        this.pieAlpha = 1;
        this.pieBrightnessStep = 30;
        this.groupPercent = 0;
        this.groupedTitle = "Other";
        this.groupedPulled = !1;
        this.groupedAlpha = 1;
        this.marginLeft = 0;
        this.marginBottom = this.marginTop = 10;
        this.marginRight = 0;
        this.minRadius = 10;
        this.hoverAlpha = 1;
        this.depth3D = 0;
        this.startAngle = 90;
        this.angle = this.innerRadius = 0;
        this.outlineColor = "#FFFFFF";
        this.outlineAlpha = 0;
        this.outlineThickness = 1;
        this.startRadius = "500%";
        this.startDuration = this.startAlpha = 1;
        this.startEffect = "bounce";
        this.sequencedAnimation = !1;
        this.pullOutRadius = "20%";
        this.pullOutDuration = 1;
        this.pullOutEffect = "bounce";
        this.pullOnHover =
        this.pullOutOnlyOne = !1;
        this.labelsEnabled = !0;
        this.labelRadius = 30;
        this.labelTickColor = "#000000";
        this.labelTickAlpha = 0.2;
        this.labelText = "[[title]]: [[percents]]%";
        this.hideLabelsPercent = 0;
        this.balloonText = "[[title]]: [[percents]]% ([[value]])\n[[description]]";
        this.urlTarget = "_self";
        this.previousScale = 1;
        this.autoMarginOffset = 10;
        this.gradientRatio = []
    },
    initChart: function () {
        AmCharts.AmPieChart.base.initChart.call(this);
        this.dataChanged && (this.parseData(), this.dispatchDataUpdated = !0, this.dataChanged = !1, this.legend && this.legend.setData(this.chartData));
        this.drawChart()
    },
    handleLegendEvent: function (a) {
        var b = a.type;
        if (a = a.dataItem) {
            var c = a.hidden;
            switch (b) {
            case "clickMarker":
                c || this.clickSlice(a);
                break;
            case "clickLabel":
                c || this.clickSlice(a);
                break;
            case "rollOverItem":
                c || this.rollOverSlice(a, !1);
                break;
            case "rollOutItem":
                c || this.rollOutSlice(a);
                break;
            case "hideItem":
                this.hideSlice(a);
                break;
            case "showItem":
                this.showSlice(a)
            }
        }
    },
    invalidateVisibility: function () {
        this.recalculatePercents();
        this.initChart();
        var a = this.legend;
        a && a.invalidateSize()
    },
    drawChart: function () {
        var a = this;
        AmCharts.AmPieChart.base.drawChart.call(a);
        var b = a.chartData;
        if (AmCharts.ifArray(b)) {
            if (0 < a.realWidth && 0 < a.realHeight) {
                AmCharts.VML && (a.startAlpha = 1);
                var c = a.startDuration,
                    d = a.container,
                    e = a.updateWidth();
                a.realWidth = e;
                var f = a.updateHeight();
                a.realHeight = f;
                var g = AmCharts.toCoordinate,
                    h = g(a.marginLeft, e),
                    k = g(a.marginRight, e),
                    l = g(a.marginTop, f) + a.getTitleHeight(),
                    m = g(a.marginBottom, f);
                a.chartDataLabels = [];
                a.ticks = [];
                var n, r, p, s =
                AmCharts.toNumber(a.labelRadius),
                    q = a.measureMaxLabel();
                a.labelText && a.labelsEnabled || (s = q = 0);
                n = void 0 === a.pieX ? (e - h - k) / 2 + h : g(a.pieX, a.realWidth);
                r = void 0 === a.pieY ? (f - l - m) / 2 + l : g(a.pieY, f);
                p = g(a.radius, e, f);
                a.pullOutRadiusReal = AmCharts.toCoordinate(a.pullOutRadius, p);
                p || (e = 0 <= s ? e - h - k - 2 * q : e - h - k, f = f - l - m, p = Math.min(e, f), f < e && (p /= 1 - a.angle / 90, p > e && (p = e)), a.pullOutRadiusReal = AmCharts.toCoordinate(a.pullOutRadius, p), p = 0 <= s ? p - 1.8 * (s + a.pullOutRadiusReal) : p - 1.8 * a.pullOutRadiusReal, p /= 2);
                p < a.minRadius && (p = a.minRadius);
                a.pullOutRadiusReal = g(a.pullOutRadius, p);
                g = g(a.innerRadius, p);
                g >= p && (g = p - 1);
                f = AmCharts.fitToBounds(a.startAngle, 0, 360);
                0 < a.depth3D && (f = 270 <= f ? 270 : 90);
                l = p - p * a.angle / 90;
                for (m = 0; m < b.length; m++) if (e = b[m], !0 !== e.hidden && 0 < e.percents) {
                        var k = 360 * -e.percents / 100,
                            q = Math.cos((f + k / 2) / 180 * Math.PI),
                            t = Math.sin((-f - k / 2) / 180 * Math.PI) * (l / p),
                            h = {
                                fill: e.color,
                                stroke: a.outlineColor,
                                "stroke-width": a.outlineThickness,
                                "stroke-opacity": a.outlineAlpha
                            };
                        e.url && (h.cursor = "pointer");
                        h = AmCharts.wedge(d, n, r, f, k, p, l, g, a.depth3D, h, a.gradientRatio);
                        a.addEventListeners(h, e);
                        e.startAngle = f;
                        b[m].wedge = h;
                        if (0 < c) {
                                var v = a.startAlpha;
                                a.chartCreated && (v = e.alpha);
                                h.setAttr("opacity", v)
                            }
                        e.ix = q;
                        e.iy = t;
                        e.wedge = h;
                        e.index = m;
                        if (a.labelsEnabled && a.labelText && e.percents >= a.hideLabelsPercent) {
                                var u = f + k / 2;
                                0 >= u && (u += 360);
                                k = s;
                                isNaN(e.labelRadius) || (k = e.labelRadius);
                                var q = n + q * (p + k),
                                    t = r + t * (p + k),
                                    w, v = 0;
                                if (0 <= k) {
                                        var y;
                                        90 >= u && 0 <= u ? (y = 0, w = "start", v = 8) : 360 >= u && 270 < u ? (y = 1, w = "start", v = 8) : 270 >= u && 180 < u ? (y = 2, w = "end", v = -8) : 180 >= u && 90 < u && (y = 3, w = "end", v = -8);
                                        e.labelQuarter = y
                                    } else w = "middle";
                                var u = a.formatString(a.labelText, e),
                                    x = e.labelColor;
                                void 0 == x && (x = a.color);
                                u = AmCharts.text(d, u, x, a.fontFamily, a.fontSize, w);
                                u.translate(q + 1.5 * v, t);
                                e.tx = q + 1.5 * v;
                                e.ty = t;
                                0 <= k ? h.push(u) : a.freeLabelsSet.push(u);
                                e.label = u;
                                a.chartDataLabels[m] = u;
                                e.tx = q;
                                e.tx2 = q + v
                            }
                        a.graphsSet.push(h);
                            (0 === e.alpha || 0 < c && !a.chartCreated) && h.hide();
                        f -= 360 * e.percents / 100;
                        0 >= f && (f += 360)
                    }
                b = setTimeout(function () {
                        a.showLabels.call(a)
                    }, 1E3 * c);
                a.timeOuts.push(b);
                0 < s && !a.labelRadiusField && a.arrangeLabels();
                a.pieXReal = n;
                a.pieYReal = r;
                a.radiusReal = p;
                a.innerRadiusReal = g;
                0 < s && a.drawTicks();
                a.chartCreated ? a.pullSlices(!0) : (c = setTimeout(function () {
                        a.pullSlices.call(a)
                    }, 1200 * c), a.timeOuts.push(c));
                a.chartCreated || a.startSlices();
                a.setDepths()
            }(c = a.legend) && c.invalidateSize()
        } else a.cleanChart();
        a.dispDUpd();
        a.chartCreated = !0
    },
    setDepths: function () {
        var a = this.chartData,
            b;
        for (b = 0; b < a.length; b++) {
                var c = a[b],
                    d = c.wedge,
                    c = c.startAngle;
                90 >= c && 0 <= c || 360 >= c && 270 < c ? d.toFront() : (270 >= c && 180 < c || 180 >= c && 90 < c) && d.toBack()
            }
    },
    addEventListeners: function (a, b) {
        var c = this;
        a.mouseover(function () {
            c.rollOverSlice(b, !0)
        }).mouseout(function () {
            c.rollOutSlice(b)
        }).click(function () {
            c.clickSlice(b)
        }).contextmenu(function () {
            c.handleRightClick(b)
        })
    },
    formatString: function (a, b) {
        a = AmCharts.formatValue(a, b, ["value"], this.numberFormatter, "", this.usePrefixes, this.prefixesOfSmallNumbers, this.prefixesOfBigNumbers);
        a = AmCharts.formatValue(a, b, ["percents"], this.percentFormatter);
        a = AmCharts.massReplace(a, {
            "[[title]]": b.title,
            "[[description]]": b.description,
            "<br>": "\n"
        });
        a = AmCharts.fixNewLines(a);
        return a = AmCharts.cleanFromEmpty(a)
    },
    drawTicks: function () {
        var a = this.chartData,
            b;
        for (b = 0; b < a.length; b++) if (this.chartDataLabels[b]) {
                var c = a[b],
                    d = c.ty,
                    e = this.radiusReal,
                    d = AmCharts.line(this.container, [this.pieXReal + c.ix * e, c.tx, c.tx2], [this.pieYReal + c.iy * e, d, d], this.labelTickColor, this.labelTickAlpha);
                c.wedge.push(d);
                this.ticks[b] = d
            }
    },
    arrangeLabels: function () {
        var a = this.chartData,
            b = a.length,
            c, d;
        for (d = b - 1; 0 <= d; d--) c = a[d],
        0 !== c.labelQuarter || c.hidden || this.checkOverlapping(d, c, 0, !0, 0);
        for (d = 0; d < b; d++) c = a[d],
        1 != c.labelQuarter || c.hidden || this.checkOverlapping(d, c, 1, !1, 0);
        for (d = b - 1; 0 <= d; d--) c = a[d],
        2 != c.labelQuarter || c.hidden || this.checkOverlapping(d, c, 2, !0, 0);
        for (d = 0; d < b; d++) c = a[d],
        3 != c.labelQuarter || c.hidden || this.checkOverlapping(d, c, 3, !1, 0)
    },
    checkOverlapping: function (a, b, c, d, e) {
        var f, g, h = this.chartData,
            k = h.length,
            l = b.label;
        if (l) {
                if (!0 === d) for (g = a + 1; g < k; g++)(f = this.checkOverlappingReal(b, h[g], c)) && (g = k);
                else for (g = a - 1; 0 <= g; g--)(f = this.checkOverlappingReal(b, h[g], c)) && (g = 0);
                !0 === f && 100 > e && (f = b.ty + 3 * b.iy, b.ty = f, l.translate(b.tx2, f), this.checkOverlapping(a, b, c, d, e + 1))
            }
    },
    checkOverlappingReal: function (a, b, c) {
        var d = !1,
            e = a.label,
            f = b.label;
        a.labelQuarter != c || (a.hidden || b.hidden || !f) || (e = e.getBBox(), c = {}, c.width = e.width, c.height = e.height, c.y = a.ty, c.x = a.tx, a = f.getBBox(), f = {}, f.width = a.width, f.height = a.height, f.y = b.ty, f.x = b.tx, AmCharts.hitTest(c, f) && (d = !0));
        return d
    },
    startSlices: function () {
        var a;
        for (a = 0; a < this.chartData.length; a++) 0 < this.startDuration && this.sequencedAnimation ? this.setStartTO(a) : this.startSlice(this.chartData[a])
    },
    setStartTO: function (a) {
        var b = this;
        a = setTimeout(function () {
            b.startSequenced.call(b)
        }, 500 * (b.startDuration / b.chartData.length) * a);
        b.timeOuts.push(a)
    },
    pullSlices: function (a) {
        var b = this.chartData,
            c;
        for (c = 0; c < b.length; c++) {
                var d = b[c];
                d.pulled && this.pullSlice(d, 1, a)
            }
    },
    startSequenced: function () {
        var a = this.chartData,
            b;
        for (b = 0; b < a.length; b++) if (!a[b].started) {
                this.startSlice(this.chartData[b]);
                break
            }
    },
    startSlice: function (a) {
        a.started = !0;
        var b = a.wedge,
            c = this.startDuration;
        if (b && 0 < c) {
                0 < a.alpha && b.show();
                var d = AmCharts.toCoordinate(this.startRadius, this.radiusReal);
                b.translate(Math.round(a.ix * d), Math.round(a.iy * d));
                b.animate({
                    opacity: a.alpha,
                    translate: "0,0"
                }, c, this.startEffect)
            }
    },
    showLabels: function () {
        var a = this.chartData,
            b;
        for (b = 0; b < a.length; b++) if (0 < a[b].alpha) {
                var c = this.chartDataLabels[b];
                c && c.show();
                (c = this.ticks[b]) && c.show()
            }
    },
    showSlice: function (a) {
        isNaN(a) ? a.hidden = !1 : this.chartData[a].hidden = !1;
        this.hideBalloon();
        this.invalidateVisibility()
    },
    hideSlice: function (a) {
        isNaN(a) ? a.hidden = !0 : this.chartData[a].hidden = !0;
        this.hideBalloon();
        this.invalidateVisibility()
    },
    rollOverSlice: function (a, b) {
        isNaN(a) || (a = this.chartData[a]);
        clearTimeout(this.hoverInt);
        this.pullOnHover && this.pullSlice(a, 1);
        var c = this.innerRadiusReal + (this.radiusReal - this.innerRadiusReal) / 2;
        a.pulled && (c += this.pullOutRadiusReal);
        1 > this.hoverAlpha && a.wedge && a.wedge.attr({
            opacity: this.hoverAlpha
        });
        var d = a.ix * c + this.pieXReal,
            c = a.iy * c + this.pieYReal,
            e = this.formatString(this.balloonText, a),
            f = AmCharts.adjustLuminosity(a.color, -0.15);
        this.showBalloon(e, f, b, d, c);
        d = {
                type: "rollOverSlice",
                dataItem: a,
                chart: this
            };
        this.fire(d.type, d)
    },
    rollOutSlice: function (a) {
        isNaN(a) || (a = this.chartData[a]);
        a.wedge && a.wedge.attr({
            opacity: a.alpha
        });
        this.hideBalloon();
        a = {
            type: "rollOutSlice",
            dataItem: a,
            chart: this
        };
        this.fire(a.type, a)
    },
    clickSlice: function (a) {
        isNaN(a) || (a = this.chartData[a]);
        this.hideBalloon();
        a.pulled ? this.pullSlice(a, 0) : this.pullSlice(a, 1);
        AmCharts.getURL(a.url, this.urlTarget);
        a = {
            type: "clickSlice",
            dataItem: a,
            chart: this
        };
        this.fire(a.type, a)
    },
    handleRightClick: function (a) {
        isNaN(a) || (a = this.chartData[a]);
        a = {
            type: "rightClickSlice",
            dataItem: a,
            chart: this
        };
        this.fire(a.type, a)
    },
    pullSlice: function (a, b, c) {
        var d = a.ix,
            e = a.iy,
            f = this.pullOutDuration;
        !0 === c && (f = 0);
        c = a.wedge;
        var g = this.pullOutRadiusReal;
        c && c.animate({
                translate: b * d * g + "," + b * e * g
            }, f, this.pullOutEffect);
        1 == b ? (a.pulled = !0, this.pullOutOnlyOne && this.pullInAll(a.index), a = {
                type: "pullOutSlice",
                dataItem: a,
                chart: this
            }) : (a.pulled = !1, a = {
                type: "pullInSlice",
                dataItem: a,
                chart: this
            });
        this.fire(a.type, a)
    },
    pullInAll: function (a) {
        var b = this.chartData,
            c;
        for (c = 0; c < this.chartData.length; c++) c != a && b[c].pulled && this.pullSlice(b[c], 0)
    },
    pullOutAll: function (a) {
        a = this.chartData;
        var b;
        for (b = 0; b < a.length; b++) a[b].pulled || this.pullSlice(a[b], 1)
    },
    parseData: function () {
        var a = [];
        this.chartData = a;
        var b = this.dataProvider;
        if (void 0 !== b) {
            var c = b.length,
                d = 0,
                e, f, g;
            for (e = 0; e < c; e++) {
                    f = {};
                    var h = b[e];
                    f.dataContext = h;
                    f.value = Number(h[this.valueField]);
                    (g = h[this.titleField]) || (g = "");
                    f.title = g;
                    f.pulled = AmCharts.toBoolean(h[this.pulledField], !1);
                    (g = h[this.descriptionField]) || (g = "");
                    f.description = g;
                    f.labelRadius = Number(h[this.labelRadiusField]);
                    f.url = h[this.urlField];
                    f.visibleInLegend = AmCharts.toBoolean(h[this.visibleInLegendField], !0);
                    g = h[this.alphaField];
                    f.alpha = void 0 !== g ? Number(g) : this.pieAlpha;
                    g = h[this.colorField];
                    void 0 !== g && (f.color = AmCharts.toColor(g));
                    f.labelColor = AmCharts.toColor(h[this.labelColorField]);
                    d += f.value;
                    f.hidden = !1;
                    a[e] = f
                }
            for (e = b = 0; e < c; e++) f = a[e],
            f.percents =
            100 * (f.value / d),
            f.percents < this.groupPercent && b++;
            1 < b && (this.groupValue = 0, this.removeSmallSlices(), a.push({
                    title: this.groupedTitle,
                    value: this.groupValue,
                    percents: 100 * (this.groupValue / d),
                    pulled: this.groupedPulled,
                    color: this.groupedColor,
                    url: this.groupedUrl,
                    description: this.groupedDescription,
                    alpha: this.groupedAlpha
                }));
            for (e = 0; e < a.length; e++) this.pieBaseColor ? g = AmCharts.adjustLuminosity(this.pieBaseColor, e * this.pieBrightnessStep / 100) : (g = this.colors[e], void 0 === g && (g = AmCharts.randomColor())),
            void 0 === a[e].color && (a[e].color = g);
            this.recalculatePercents()
        }
    },
    recalculatePercents: function () {
        var a = this.chartData,
            b = 0,
            c, d;
        for (c = 0; c < a.length; c++) d = a[c],
        !d.hidden && 0 < d.value && (b += d.value);
        for (c = 0; c < a.length; c++) d = this.chartData[c],
        d.percents = !d.hidden && 0 < d.value ? 100 * d.value / b : 0
    },
    removeSmallSlices: function () {
        var a = this.chartData,
            b;
        for (b = a.length - 1; 0 <= b; b--) a[b].percents < this.groupPercent && (this.groupValue += a[b].value, a.splice(b, 1))
    },
    animateAgain: function () {
        var a = this;
        a.startSlices();
        var b = setTimeout(function () {
            a.pullSlices.call(a)
        }, 1200 * a.startDuration);
        a.timeOuts.push(b)
    },
    measureMaxLabel: function () {
        var a = this.chartData,
            b = 0,
            c;
        for (c = 0; c < a.length; c++) {
                var d = this.formatString(this.labelText, a[c]),
                    d = AmCharts.text(this.container, d, this.color, this.fontFamily, this.fontSize),
                    e = d.getBBox().width;
                e > b && (b = e);
                d.remove()
            }
        return b
    }
});
AmCharts.AmXYChart = AmCharts.Class({
    inherits: AmCharts.AmRectangularChart,
    construct: function () {
        AmCharts.AmXYChart.base.construct.call(this);
        this.createEvents("zoomed");
        this.maxZoomFactor = 20;
        this.chartType = "xy"
    },
    initChart: function () {
        AmCharts.AmXYChart.base.initChart.call(this);
        this.dataChanged && (this.updateData(), this.dataChanged = !1, this.dispatchDataUpdated = !0);
        this.updateScrollbar = !0;
        this.drawChart();
        this.autoMargins && !this.marginsUpdated && (this.marginsUpdated = !0, this.measureMargins());
        var a = this.marginLeftReal,
            b = this.marginTopReal,
            c = this.plotAreaWidth,
            d = this.plotAreaHeight;
        this.graphsSet.clipRect(a, b, c, d);
        this.bulletSet.clipRect(a, b, c, d);
        this.trendLinesSet.clipRect(a, b, c, d)
    },
    createValueAxes: function () {
        var a = [],
            b = [];
        this.xAxes = a;
        this.yAxes = b;
        var c = this.valueAxes,
            d, e;
        for (e = 0; e < c.length; e++) {
                d = c[e];
                var f = d.position;
                if ("top" == f || "bottom" == f) d.rotate = !0;
                d.setOrientation(d.rotate);
                f = d.orientation;
                "V" == f && b.push(d);
                "H" == f && a.push(d)
            }
        0 === b.length && (d = new AmCharts.ValueAxis, d.rotate = !1, d.setOrientation(!1), c.push(d), b.push(d));
        0 === a.length && (d = new AmCharts.ValueAxis, d.rotate = !0, d.setOrientation(!0), c.push(d), a.push(d));
        for (e = 0; e < c.length; e++) this.processValueAxis(c[e], e);
        a = this.graphs;
        for (e = 0; e < a.length; e++) this.processGraph(a[e], e)
    },
    drawChart: function () {
        AmCharts.AmXYChart.base.drawChart.call(this);
        AmCharts.ifArray(this.chartData) ? (this.chartScrollbar && this.updateScrollbars(), this.zoomChart()) : this.cleanChart();
        if (this.hideXScrollbar) {
            var a = this.scrollbarH;
            a && (this.removeListener(a, "zoomed", this.handleHSBZoom), a.destroy());
            this.scrollbarH = null
        }
        if (this.hideYScrollbar) {
            if (a = this.scrollbarV) this.removeListener(a, "zoomed", this.handleVSBZoom),
            a.destroy();
            this.scrollbarV = null
        }
        if (!this.autoMargins || this.marginsUpdated) this.dispDUpd(),
        this.chartCreated = !0,
        this.zoomScrollbars()
    },
    cleanChart: function () {
        AmCharts.callMethod("destroy", [this.valueAxes, this.graphs, this.scrollbarV, this.scrollbarH, this.chartCursor])
    },
    zoomChart: function () {
        this.toggleZoomOutButton();
        this.zoomObjects(this.valueAxes);
        this.zoomObjects(this.graphs);
        this.zoomTrendLines();
        this.dispatchAxisZoom()
    },
    toggleZoomOutButton: function () {
        1 == this.heightMultiplier && 1 == this.widthMultiplier ? this.showZB(!1) : this.showZB(!0)
    },
    dispatchAxisZoom: function () {
        var a = this.valueAxes,
            b;
        for (b = 0; b < a.length; b++) {
                var c = a[b];
                if (!isNaN(c.min) && !isNaN(c.max)) {
                    var d, e;
                    "V" == c.orientation ? (d = c.coordinateToValue(-this.verticalPosition), e = c.coordinateToValue(-this.verticalPosition + this.plotAreaHeight)) : (d = c.coordinateToValue(-this.horizontalPosition), e = c.coordinateToValue(-this.horizontalPosition + this.plotAreaWidth));
                    if (!isNaN(d) && !isNaN(e)) {
                        if (d > e) {
                            var f = e;
                            e = d;
                            d = f
                        }
                        c.dispatchZoomEvent(d, e)
                    }
                }
            }
    },
    zoomObjects: function (a) {
        var b = a.length,
            c;
        for (c = 0; c < b; c++) {
                var d = a[c];
                this.updateObjectSize(d);
                d.zoom(0, this.chartData.length - 1)
            }
    },
    updateData: function () {
        this.parseData();
        var a = this.chartData,
            b = a.length - 1,
            c = this.graphs,
            d = this.dataProvider,
            e = 0,
            f, g;
        for (f = 0; f < c.length; f++) if (g = c[f], g.data = a, g.zoom(0, b), g = g.valueField) {
                var h;
                for (h = 0; h < d.length; h++) {
                    var k = d[h][g];
                    k > e && (e = k)
                }
            }
        for (f = 0; f < c.length; f++) g = c[f],
        g.maxValue =
        e;
        if (a = this.chartCursor) a.updateData(),
        a.type = "crosshair",
        a.valueBalloonsEnabled = !1
    },
    zoomOut: function () {
        this.verticalPosition = this.horizontalPosition = 0;
        this.heightMultiplier = this.widthMultiplier = 1;
        this.zoomChart();
        this.zoomScrollbars()
    },
    processValueAxis: function (a) {
        a.chart = this;
        a.minMaxField = "H" == a.orientation ? "x" : "y";
        a.minTemp = NaN;
        a.maxTemp = NaN;
        this.listenTo(a, "axisSelfZoomed", this.handleAxisSelfZoom)
    },
    processGraph: function (a) {
        a.xAxis || (a.xAxis = this.xAxes[0]);
        a.yAxis || (a.yAxis = this.yAxes[0])
    },
    parseData: function () {
        AmCharts.AmXYChart.base.parseData.call(this);
        this.chartData = [];
        var a = this.dataProvider,
            b = this.valueAxes,
            c = this.graphs,
            d;
        for (d = 0; d < a.length; d++) {
                var e = {
                    axes: {},
                    x: {},
                    y: {}
                },
                    f = a[d],
                    g;
                for (g = 0; g < b.length; g++) {
                        var h = b[g].id;
                        e.axes[h] = {};
                        e.axes[h].graphs = {};
                        var k;
                        for (k = 0; k < c.length; k++) {
                            var l = c[k],
                                m = l.id;
                            if (l.xAxis.id == h || l.yAxis.id == h) {
                                    var n = {};
                                    n.serialDataItem = e;
                                    n.index = d;
                                    var r = {},
                                        p = Number(f[l.valueField]);
                                    isNaN(p) || (r.value = p);
                                    p = Number(f[l.xField]);
                                    isNaN(p) || (r.x = p);
                                    p = Number(f[l.yField]);
                                    isNaN(p) || (r.y = p);
                                    n.values = r;
                                    this.processFields(l, n, f);
                                    n.serialDataItem =
                                    e;
                                    n.graph = l;
                                    e.axes[h].graphs[m] = n
                                }
                        }
                    }
                this.chartData[d] = e
            }
    },
    formatString: function (a, b) {
        var c = b.graph.numberFormatter;
        c || (c = this.numberFormatter);
        a = AmCharts.formatValue(a, b.values, ["value", "x", "y"], c); - 1 != a.indexOf("[[") && (a = AmCharts.formatDataContextValue(a, b.dataContext));
        return a = AmCharts.AmSerialChart.base.formatString.call(this, a, b)
    },
    addChartScrollbar: function (a) {
        AmCharts.callMethod("destroy", [this.chartScrollbar, this.scrollbarH, this.scrollbarV]);
        if (a) {
            this.chartScrollbar = a;
            this.scrollbarHeight =
            a.scrollbarHeight;
            var b = "backgroundColor backgroundAlpha selectedBackgroundColor selectedBackgroundAlpha scrollDuration resizeEnabled hideResizeGrips scrollbarHeight updateOnReleaseOnly".split(" ");
            if (!this.hideYScrollbar) {
                var c = new AmCharts.SimpleChartScrollbar;
                c.skipEvent = !0;
                c.chart = this;
                this.listenTo(c, "zoomed", this.handleVSBZoom);
                AmCharts.copyProperties(a, c, b);
                c.rotate = !0;
                this.scrollbarV = c
            }
            this.hideXScrollbar || (c = new AmCharts.SimpleChartScrollbar, c.skipEvent = !0, c.chart = this, this.listenTo(c, "zoomed", this.handleHSBZoom), AmCharts.copyProperties(a, c, b), c.rotate = !1, this.scrollbarH = c)
        }
    },
    updateTrendLines: function () {
        var a = this.trendLines,
            b;
        for (b = 0; b < a.length; b++) {
                var c = a[b];
                c.chart = this;
                c.valueAxis || (c.valueAxis = this.yAxes[0]);
                c.valueAxisX || (c.valueAxisX = this.xAxes[0])
            }
    },
    updateMargins: function () {
        AmCharts.AmXYChart.base.updateMargins.call(this);
        var a = this.scrollbarV;
        a && (this.getScrollbarPosition(a, !0, this.yAxes[0].position), this.adjustMargins(a, !0));
        if (a = this.scrollbarH) this.getScrollbarPosition(a, !1, this.xAxes[0].position),
        this.adjustMargins(a, !1)
    },
    updateScrollbars: function () {
        var a = this.scrollbarV;
        a && (this.updateChartScrollbar(a, !0), a.draw());
        if (a = this.scrollbarH) this.updateChartScrollbar(a, !1),
        a.draw()
    },
    zoomScrollbars: function () {
        var a = this.scrollbarH;
        a && a.relativeZoom(this.widthMultiplier, -this.horizontalPosition / this.widthMultiplier);
        (a = this.scrollbarV) && a.relativeZoom(this.heightMultiplier, -this.verticalPosition / this.heightMultiplier)
    },
    fitMultiplier: function (a) {
        a > this.maxZoomFactor && (a = this.maxZoomFactor);
        return a
    },
    handleHSBZoom: function (a) {
        var b = this.fitMultiplier(a.multiplier);
        a = -a.position * b;
        var c = -(this.plotAreaWidth * b - this.plotAreaWidth);
        a < c && (a = c);
        this.widthMultiplier = b;
        this.horizontalPosition = a;
        this.zoomChart()
    },
    handleVSBZoom: function (a) {
        var b = this.fitMultiplier(a.multiplier);
        a = -a.position * b;
        var c = -(this.plotAreaHeight * b - this.plotAreaHeight);
        a < c && (a = c);
        this.heightMultiplier = b;
        this.verticalPosition = a;
        this.zoomChart()
    },
    handleAxisSelfZoom: function (a) {
        if ("H" == a.valueAxis.orientation) {
            var b = this.fitMultiplier(a.multiplier);
            a = -a.position * b;
            var c = -(this.plotAreaWidth * b - this.plotAreaWidth);
            a < c && (a = c);
            this.horizontalPosition = a;
            this.widthMultiplier = b
        } else b = this.fitMultiplier(a.multiplier),
        a = -a.position * b,
        c = -(this.plotAreaHeight * b - this.plotAreaHeight),
        a < c && (a = c),
        this.verticalPosition = a,
        this.heightMultiplier = b;
        this.zoomChart();
        this.zoomScrollbars()
    },
    handleCursorZoom: function (a) {
        var b = this.widthMultiplier * this.plotAreaWidth / a.selectionWidth,
            c = this.heightMultiplier * this.plotAreaHeight / a.selectionHeight,
            b = this.fitMultiplier(b),
            c = this.fitMultiplier(c);
        this.horizontalPosition = (this.horizontalPosition - a.selectionX) * b / this.widthMultiplier;
        this.verticalPosition = (this.verticalPosition - a.selectionY) * c / this.heightMultiplier;
        this.widthMultiplier = b;
        this.heightMultiplier = c;
        this.zoomChart();
        this.zoomScrollbars()
    },
    removeChartScrollbar: function () {
        AmCharts.callMethod("destroy", [this.scrollbarH, this.scrollbarV]);
        this.scrollbarV = this.scrollbarH = null
    },
    handleReleaseOutside: function (a) {
        AmCharts.AmXYChart.base.handleReleaseOutside.call(this, a);
        AmCharts.callMethod("handleReleaseOutside", [this.scrollbarH, this.scrollbarV])
    }
});
AmCharts.AmDraw = AmCharts.Class({
    construct: function (a, b, c) {
        AmCharts.SVG_NS = "http://www.w3.org/2000/svg";
        AmCharts.SVG_XLINK = "http://www.w3.org/1999/xlink";
        AmCharts.hasSVG = !! document.createElementNS && !! document.createElementNS(AmCharts.SVG_NS, "svg").createSVGRect;
        1 > b && (b = 10);
        1 > c && (c = 10);
        this.div = a;
        this.width = b;
        this.height = c;
        this.rBin = document.createElement("div");
        if (AmCharts.hasSVG) {
            AmCharts.SVG = !0;
            var d = this.createSvgElement("svg");
            d.style.position = "absolute";
            d.style.width = b + "px";
            d.style.height = c + "px";
            AmCharts.rtl && (d.setAttribute("direction", "rtl"), d.style.left = "auto", d.style.right = "0px");
            d.setAttribute("version", "1.1");
            a.appendChild(d);
            this.container = d;
            this.R = new AmCharts.SVGRenderer(this)
        } else AmCharts.isIE && AmCharts.VMLRenderer && (AmCharts.VML = !0, AmCharts.vmlStyleSheet || (document.namespaces.add("amvml", "urn:schemas-microsoft-com:vml"), b = document.createStyleSheet(), b.addRule(".amvml", "behavior:url(#default#VML); display:inline-block; antialias:true"), AmCharts.vmlStyleSheet = b), this.container =
        a, this.R = new AmCharts.VMLRenderer(this), this.R.disableSelection(a))
    },
    createSvgElement: function (a) {
        return document.createElementNS(AmCharts.SVG_NS, a)
    },
    circle: function (a, b, c, d) {
        var e = new AmCharts.AmDObject("circle", this);
        e.attr({
            r: c,
            cx: a,
            cy: b
        });
        this.addToContainer(e.node, d);
        return e
    },
    setSize: function (a, b) {
        0 < a && 0 < b && (this.container.style.width = a + "px", this.container.style.height = b + "px")
    },
    rect: function (a, b, c, d, e, f, g) {
        var h = new AmCharts.AmDObject("rect", this);
        AmCharts.VML && (e = 100 * e / Math.min(c, d), c += 2 * f, d += 2 * f, h.bw = f, h.node.style.marginLeft = -f, h.node.style.marginTop = -f);
        1 > c && (c = 1);
        1 > d && (d = 1);
        h.attr({
            x: a,
            y: b,
            width: c,
            height: d,
            rx: e,
            ry: e,
            "stroke-width": f
        });
        this.addToContainer(h.node, g);
        return h
    },
    image: function (a, b, c, d, e, f) {
        var g = new AmCharts.AmDObject("image", this);
        g.attr({
            x: b,
            y: c,
            width: d,
            height: e
        });
        this.R.path(g, a);
        this.addToContainer(g.node, f);
        return g
    },
    addToContainer: function (a, b) {
        b || (b = this.container);
        b.appendChild(a)
    },
    text: function (a, b, c) {
        return this.R.text(a, b, c)
    },
    path: function (a, b, c, d) {
        var e =
        new AmCharts.AmDObject("path", this);
        d || (d = "100,100");
        e.attr({
            cs: d
        });
        c ? e.attr({
            dd: a
        }) : e.attr({
            d: a
        });
        this.addToContainer(e.node, b);
        return e
    },
    set: function (a) {
        return this.R.set(a)
    },
    remove: function (a) {
        if (a) {
            var b = this.rBin;
            b.appendChild(a);
            b.innerHTML = ""
        }
    },
    bounce: function (a, b, c, d, e) {
        return (b /= e) < 1 / 2.75 ? d * 7.5625 * b * b + c : b < 2 / 2.75 ? d * (7.5625 * (b -= 1.5 / 2.75) * b + 0.75) + c : b < 2.5 / 2.75 ? d * (7.5625 * (b -= 2.25 / 2.75) * b + 0.9375) + c : d * (7.5625 * (b -= 2.625 / 2.75) * b + 0.984375) + c
    },
    easeInSine: function (a, b, c, d, e) {
        return -d * Math.cos(b / e * (Math.PI / 2)) + d + c
    },
    easeOutSine: function (a, b, c, d, e) {
        return d * Math.sin(b / e * (Math.PI / 2)) + c
    },
    easeOutElastic: function (a, b, c, d, e) {
        a = 1.70158;
        var f = 0,
            g = d;
        if (0 === b) return c;
        if (1 == (b /= e)) return c + d;
        f || (f = 0.3 * e);
        g < Math.abs(d) ? (g = d, a = f / 4) : a = f / (2 * Math.PI) * Math.asin(d / g);
        return g * Math.pow(2, -10 * b) * Math.sin((b * e - a) * 2 * Math.PI / f) + d + c
    },
    renderFix: function () {
        var a = this.container,
            b = a.style,
            c;
        try {
                c = a.getScreenCTM() || a.createSVGMatrix()
            } catch (d) {
                c = a.createSVGMatrix()
            }
        a = 1 - c.e % 1;
        c = 1 - c.f % 1;
        0.5 < a && (a -= 1);
        0.5 < c && (c -= 1);
        a && (b.left = a + "px");
        c && (b.top = c + "px")
    }
});
AmCharts.AmDObject = AmCharts.Class({
    construct: function (a, b) {
        this.D = b;
        this.R = b.R;
        this.node = this.R.create(this, a);
        this.y = this.x = 0;
        this.scale = 1
    },
    attr: function (a) {
        this.R.attr(this, a);
        return this
    },
    getAttr: function (a) {
        return this.node.getAttribute(a)
    },
    setAttr: function (a, b) {
        this.R.setAttr(this, a, b);
        return this
    },
    clipRect: function (a, b, c, d) {
        this.R.clipRect(this, a, b, c, d)
    },
    translate: function (a, b, c, d) {
        d || (a = Math.round(a), b = Math.round(b));
        this.R.move(this, a, b, c);
        this.x = a;
        this.y = b;
        this.scale = c;
        this.angle && this.rotate(this.angle)
    },
    rotate: function (a) {
        this.R.rotate(this, a);
        this.angle = a
    },
    animate: function (a, b, c) {
        for (var d in a) if (a.hasOwnProperty(d)) {
            var e = d,
                f = a[d];
            c = AmCharts.getEffect(c);
            this.R.animate(this, e, f, b, c)
        }
    },
    push: function (a) {
        if (a) {
            var b = this.node;
            b.appendChild(a.node);
            var c = a.clipPath;
            c && b.appendChild(c);
            (a = a.grad) && b.appendChild(a)
        }
    },
    text: function (a) {
        this.R.setText(this, a)
    },
    remove: function () {
        this.R.remove(this)
    },
    clear: function () {
        var a = this.node;
        if (a.hasChildNodes()) for (; 1 <= a.childNodes.length;) a.removeChild(a.firstChild)
    },
    hide: function () {
        this.setAttr("visibility", "hidden")
    },
    show: function () {
        this.setAttr("visibility", "visible")
    },
    getBBox: function () {
        return this.R.getBBox(this)
    },
    toFront: function () {
        var a = this.node;
        if (a) {
            this.prevNextNode = a.nextSibling;
            var b = a.parentNode;
            b && b.appendChild(a)
        }
    },
    toPrevious: function () {
        var a = this.node;
        a && this.prevNextNode && (a = a.parentNode) && a.insertBefore(this.prevNextNode, null)
    },
    toBack: function () {
        var a = this.node;
        if (a) {
            this.prevNextNode = a.nextSibling;
            var b = a.parentNode;
            if (b) {
                var c = b.firstChild;
                c && b.insertBefore(a, c)
            }
        }
    },
    mouseover: function (a) {
        this.R.addListener(this, "mouseover", a);
        return this
    },
    mouseout: function (a) {
        this.R.addListener(this, "mouseout", a);
        return this
    },
    click: function (a) {
        this.R.addListener(this, "click", a);
        return this
    },
    dblclick: function (a) {
        this.R.addListener(this, "dblclick", a);
        return this
    },
    mousedown: function (a) {
        this.R.addListener(this, "mousedown", a);
        return this
    },
    mouseup: function (a) {
        this.R.addListener(this, "mouseup", a);
        return this
    },
    touchstart: function (a) {
        this.R.addListener(this, "touchstart", a);
        return this
    },
    touchend: function (a) {
        this.R.addListener(this, "touchend", a);
        return this
    },
    contextmenu: function (a) {
        this.node.addEventListener ? this.node.addEventListener("contextmenu", a) : this.R.addListener(this, "contextmenu", a);
        return this
    },
    stop: function (a) {
        (a = this.animationX) && AmCharts.removeFromArray(this.R.animations, a);
        (a = this.animationY) && AmCharts.removeFromArray(this.R.animations, a)
    },
    length: function () {
        return this.node.childNodes.length
    },
    gradient: function (a, b, c) {
        this.R.gradient(this, a, b, c)
    }
});
AmCharts.VMLRenderer = AmCharts.Class({
    construct: function (a) {
        this.D = a;
        this.cNames = {
            circle: "oval",
            rect: "roundrect",
            path: "shape"
        };
        this.styleMap = {
            x: "left",
            y: "top",
            width: "width",
            height: "height",
            "font-family": "fontFamily",
            "font-size": "fontSize",
            visibility: "visibility"
        };
        this.animations = []
    },
    create: function (a, b) {
        var c;
        if ("group" == b) c = document.createElement("div"),
        a.type = "div";
        else if ("text" == b) c = document.createElement("div"),
        a.type = "text";
        else if ("image" == b) c = document.createElement("img"),
        a.type = "image";
        else {
            a.type = "shape";
            a.shapeType = this.cNames[b];
            c = document.createElement("amvml:" + this.cNames[b]);
            var d = document.createElement("amvml:stroke");
            c.appendChild(d);
            a.stroke = d;
            var e = document.createElement("amvml:fill");
            c.appendChild(e);
            a.fill = e;
            e.className = "amvml";
            d.className = "amvml";
            c.className = "amvml"
        }
        c.style.position = "absolute";
        c.style.top = 0;
        c.style.left = 0;
        return c
    },
    path: function (a, b) {
        a.node.setAttribute("src", b)
    },
    setAttr: function (a, b, c) {
        if (void 0 !== c) {
            var d;
            8 === document.documentMode && (d = !0);
            var e = a.node,
                f = a.type,
                g = e.style;
            "r" == b && (g.width = 2 * c, g.height = 2 * c);
            "roundrect" != a.shapeType || "width" != b && "height" != b || (c -= 1);
            "cursor" == b && (g.cursor = c);
            "cx" == b && (g.left = c - AmCharts.removePx(g.width) / 2);
            "cy" == b && (g.top = c - AmCharts.removePx(g.height) / 2);
            var h = this.styleMap[b];
            void 0 !== h && (g[h] = c);
            "text" == f && ("text-anchor" == b && (a.anchor = c, h = e.clientWidth, "end" == c && (g.marginLeft = -h + "px"), "middle" == c && (g.marginLeft = -(h / 2) + "px", g.textAlign = "center"), "start" == c && (g.marginLeft = "0px")), "fill" == b && (g.color = c), "font-weight" == b && (g.fontWeight =
                c));
            if (g = a.children) for (h = 0; h < g.length; h++) g[h].setAttr(b, c);
            if ("shape" == f) {
                    "cs" == b && (e.style.width = "100px", e.style.height = "100px", e.setAttribute("coordsize", c));
                    "d" == b && e.setAttribute("path", this.svgPathToVml(c));
                    "dd" == b && e.setAttribute("path", c);
                    f = a.stroke;
                    a = a.fill;
                    "stroke" == b && (d ? f.color = c : f.setAttribute("color", c));
                    "stroke-width" == b && (d ? f.weight = c : f.setAttribute("weight", c));
                    "stroke-opacity" == b && (d ? f.opacity = c : f.setAttribute("opacity", c));
                    "stroke-dasharray" == b && (g = "solid", 0 < c && 3 > c && (g = "dot"), 3 <= c && 6 >= c && (g = "dash"), 6 < c && (g = "longdash"), d ? f.dashstyle = g : f.setAttribute("dashstyle", g));
                    if ("fill-opacity" == b || "opacity" == b) 0 === c ? d ? a.on = !1 : a.setAttribute("on", !1) : d ? a.opacity = c : a.setAttribute("opacity", c);
                    "fill" == b && (d ? a.color = c : a.setAttribute("color", c));
                    "rx" == b && (d ? e.arcSize = c + "%" : e.setAttribute("arcsize", c + "%"))
                }
        }
    },
    attr: function (a, b) {
        for (var c in b) b.hasOwnProperty(c) && this.setAttr(a, c, b[c])
    },
    text: function (a, b, c) {
        var d = new AmCharts.AmDObject("text", this.D),
            e = d.node;
        e.style.whiteSpace = "pre";
        e.innerHTML =
        a;
        this.D.addToContainer(e, c);
        this.attr(d, b);
        return d
    },
    getBBox: function (a) {
        return this.getBox(a.node)
    },
    getBox: function (a) {
        var b = a.offsetLeft,
            c = a.offsetTop,
            d = a.offsetWidth,
            e = a.offsetHeight,
            f;
        if (a.hasChildNodes()) {
                var g, h, k;
                for (k = 0; k < a.childNodes.length; k++) {
                    f = this.getBox(a.childNodes[k]);
                    var l = f.x;
                    isNaN(l) || (isNaN(g) ? g = l : l < g && (g = l));
                    var m = f.y;
                    isNaN(m) || (isNaN(h) ? h = m : m < h && (h = m));
                    l = f.width + l;
                    isNaN(l) || (d = Math.max(d, l));
                    f = f.height + m;
                    isNaN(f) || (e = Math.max(e, f))
                }
                0 > g && (b += g);
                0 > h && (c += h)
            }
        return {
                x: b,
                y: c,
                width: d,
                height: e
            }
    },
    setText: function (a, b) {
        var c = a.node;
        c && (c.innerHTML = b);
        this.setAttr(a, "text-anchor", a.anchor)
    },
    addListener: function (a, b, c) {
        a.node["on" + b] = c
    },
    move: function (a, b, c) {
        var d = a.node,
            e = d.style;
        "text" == a.type && (c -= AmCharts.removePx(e.fontSize) / 2 - 1);
        "oval" == a.shapeType && (b -= AmCharts.removePx(e.width) / 2, c -= AmCharts.removePx(e.height) / 2);
        a = a.bw;
        isNaN(a) || (b -= a, c -= a);
        isNaN(b) || isNaN(c) || (d.style.left = b + "px", d.style.top = c + "px")
    },
    svgPathToVml: function (a) {
        var b = a.split(" ");
        a = "";
        var c, d = Math.round,
            e;
        for (e =
            0; e < b.length; e++) {
                var f = b[e],
                    g = f.substring(0, 1),
                    f = f.substring(1),
                    h = f.split(","),
                    k = d(h[0]) + "," + d(h[1]);
                "M" == g && (a += " m " + k);
                "L" == g && (a += " l " + k);
                "Z" == g && (a += " x e");
                if ("Q" == g) {
                        var l = c.length,
                            m = c[l - 1],
                            n = h[0],
                            r = h[1],
                            k = h[2],
                            p = h[3];
                        c = d(c[l - 2] / 3 + 2 / 3 * n);
                        m = d(m / 3 + 2 / 3 * r);
                        n = d(2 / 3 * n + k / 3);
                        r = d(2 / 3 * r + p / 3);
                        a += " c " + c + "," + m + "," + n + "," + r + "," + k + "," + p
                    }
                "A" == g && (a += " wa " + f);
                "B" == g && (a += " at " + f);
                c = h
            }
        return a
    },
    animate: function (a, b, c, d, e) {
        var f = this,
            g = a.node;
        if ("translate" == b) {
                var h = c.split(",");
                b = h[1];
                c = g.offsetTop;
                g = {
                    obj: a,
                    frame: 0,
                    attribute: "left",
                    from: g.offsetLeft,
                    to: h[0],
                    time: d,
                    effect: e
                };
                f.animations.push(g);
                d = {
                    obj: a,
                    frame: 0,
                    attribute: "top",
                    from: c,
                    to: b,
                    time: d,
                    effect: e
                };
                f.animations.push(d);
                a.animationX = g;
                a.animationY = d
            }
        f.interval || (f.interval = setInterval(function () {
                f.updateAnimations.call(f)
            }, AmCharts.updateRate))
    },
    updateAnimations: function () {
        var a;
        for (a = this.animations.length - 1; 0 <= a; a--) {
            var b = this.animations[a],
                c = 1E3 * b.time / AmCharts.updateRate,
                d = b.frame + 1,
                e = b.obj,
                f = b.attribute;
            if (d <= c) {
                    b.frame++;
                    var g = Number(b.from),
                        h = Number(b.to) - g,
                        b = this.D[b.effect](0, d, g, h, c);
                    0 === h ? this.animations.splice(a, 1) : e.node.style[f] = b
                } else e.node.style[f] = Number(b.to),
            this.animations.splice(a, 1)
        }
    },
    clipRect: function (a, b, c, d, e) {
        a = a.node;
        0 == b && 0 == c ? (a.style.width = d + "px", a.style.height = e + "px", a.style.overflow = "hidden") : a.style.clip = "rect(" + c + "px " + (b + d) + "px " + (c + e) + "px " + b + "px)"
    },
    rotate: function (a, b) {
        if (0 != Number(b)) {
            var c = a.node,
                d = c.style,
                e = this.getBGColor(c.parentNode);
            d.backgroundColor = e;
            d.paddingLeft = 1;
            var e = b * Math.PI / 180,
                f = Math.cos(e),
                g = Math.sin(e),
                h = AmCharts.removePx(d.left),
                k = AmCharts.removePx(d.top),
                l = c.offsetWidth,
                c = c.offsetHeight,
                m = b / Math.abs(b);
            d.left = h + l / 2 - l / 2 * Math.cos(e) - m * c / 2 * Math.sin(e) + 3;
            d.top = k - m * l / 2 * Math.sin(e) + m * c / 2 * Math.sin(e);
            d.cssText = d.cssText + "; filter:progid:DXImageTransform.Microsoft.Matrix(M11='" + f + "', M12='" + -g + "', M21='" + g + "', M22='" + f + "', sizingmethod='auto expand');"
        }
    },
    getBGColor: function (a) {
        var b = "#FFFFFF";
        if (a.style) {
            var c = a.style.backgroundColor;
            "" !== c ? b = c : a.parentNode && (b = this.getBGColor(a.parentNode))
        }
        return b
    },
    set: function (a) {
        var b = new AmCharts.AmDObject("group", this.D);
        this.D.container.appendChild(b.node);
        if (a) {
            var c;
            for (c = 0; c < a.length; c++) b.push(a[c])
        }
        return b
    },
    gradient: function (a, b, c, d) {
        var e = "";
        "radialGradient" == b && (b = "gradientradial", c.reverse());
        "linearGradient" == b && (b = "gradient");
        var f;
        for (f = 0; f < c.length; f++) {
            var g = Math.round(100 * f / (c.length - 1)),
                e = e + (g + "% " + c[f]);
            f < c.length - 1 && (e += ",")
        }
        a = a.fill;
        90 == d ? d = 0 : 270 == d ? d = 180 : 180 == d ? d = 90 : 0 === d && (d = 270);
        8 === document.documentMode ? (a.type = b, a.angle = d) : (a.setAttribute("type", b), a.setAttribute("angle", d));
        e && (a.colors.value = e)
    },
    remove: function (a) {
        a.clipPath && this.D.remove(a.clipPath);
        this.D.remove(a.node)
    },
    disableSelection: function (a) {
        void 0 !== typeof a.onselectstart && (a.onselectstart = function () {
            return !1
        });
        a.style.cursor = "default"
    }
});
AmCharts.SVGRenderer = AmCharts.Class({
    construct: function (a) {
        this.D = a;
        this.animations = []
    },
    create: function (a, b) {
        return document.createElementNS(AmCharts.SVG_NS, b)
    },
    attr: function (a, b) {
        for (var c in b) b.hasOwnProperty(c) && this.setAttr(a, c, b[c])
    },
    setAttr: function (a, b, c) {
        void 0 !== c && a.node.setAttribute(b, c)
    },
    animate: function (a, b, c, d, e) {
        var f = this,
            g = a.node;
        "translate" == b ? (g = (g = g.getAttribute("transform")) ? String(g).substring(10, g.length - 1) : "0,0", g = g.split(", ").join(" "), g = g.split(" ").join(","), 0 === g && (g = "0,0")) : g = g.getAttribute(b);
        b = {
                obj: a,
                frame: 0,
                attribute: b,
                from: g,
                to: c,
                time: d,
                effect: e
            };
        f.animations.push(b);
        a.animationX = b;
        f.interval || (f.interval = setInterval(function () {
                f.updateAnimations.call(f)
            }, AmCharts.updateRate))
    },
    updateAnimations: function () {
        var a;
        for (a = this.animations.length - 1; 0 <= a; a--) {
            var b = this.animations[a],
                c = 1E3 * b.time / AmCharts.updateRate,
                d = b.frame + 1,
                e = b.obj,
                f = b.attribute,
                g, h, k;
            d <= c ? (b.frame++, "translate" == f ? (g = b.from.split(","), f = Number(g[0]), g = Number(g[1]), h = b.to.split(","), k = Number(h[0]), h = Number(h[1]), k = 0 === k - f ? k : Math.round(this.D[b.effect](0, d, f, k - f, c)), b = 0 === h - g ? h : Math.round(this.D[b.effect](0, d, g, h - g, c)), f = "transform", b = "translate(" + k + "," + b + ")") : (g = Number(b.from), k = Number(b.to), k -= g, b = this.D[b.effect](0, d, g, k, c), 0 === k && this.animations.splice(a, 1)), this.setAttr(e, f, b)) : ("translate" == f ? (h = b.to.split(","), k = Number(h[0]), h = Number(h[1]), e.translate(k, h)) : (k = Number(b.to), this.setAttr(e, f, k)), this.animations.splice(a, 1))
        }
    },
    getBBox: function (a) {
        if (a = a.node) try {
            return a.getBBox()
        } catch (b) {}
        return {
            width: 0,
            height: 0,
            x: 0,
            y: 0
        }
    },
    path: function (a, b) {
        a.node.setAttributeNS(AmCharts.SVG_XLINK, "xlink:href", b)
    },
    clipRect: function (a, b, c, d, e) {
        var f = a.node,
            g = a.clipPath;
        g && this.D.remove(g);
        var h = f.parentNode;
        h && (f = document.createElementNS(AmCharts.SVG_NS, "clipPath"), g = AmCharts.getUniqueId(), f.setAttribute("id", g), this.D.rect(b, c, d, e, 0, 0, f), h.appendChild(f), b = "#", AmCharts.baseHref && !AmCharts.isIE && (b = window.location.href + b), this.setAttr(a, "clip-path", "url(" + b + g + ")"), this.clipPathC++, a.clipPath = f)
    },
    text: function (a, b, c) {
        var d = new AmCharts.AmDObject("text", this.D);
        a = String(a).split("\n");
        var e = b["font-size"],
            f;
        for (f = 0; f < a.length; f++) {
                var g = this.create(null, "tspan");
                g.appendChild(document.createTextNode(a[f]));
                g.setAttribute("y", (e + 2) * f + e / 2);
                g.setAttribute("x", 0);
                d.node.appendChild(g)
            }
        d.node.setAttribute("y", e / 2);
        this.attr(d, b);
        this.D.addToContainer(d.node, c);
        return d
    },
    setText: function (a, b) {
        var c = a.node;
        c && (c.removeChild(c.firstChild), c.appendChild(document.createTextNode(b)))
    },
    move: function (a, b, c, d) {
        b = "translate(" + b + "," + c + ")";
        d && (b = b + " scale(" + d + ")");
        this.setAttr(a, "transform", b)
    },
    rotate: function (a, b) {
        var c = a.node.getAttribute("transform"),
            d = "rotate(" + b + ")";
        c && (d = c + " " + d);
        this.setAttr(a, "transform", d)
    },
    set: function (a) {
        var b = new AmCharts.AmDObject("g", this.D);
        this.D.container.appendChild(b.node);
        if (a) {
            var c;
            for (c = 0; c < a.length; c++) b.push(a[c])
        }
        return b
    },
    addListener: function (a, b, c) {
        a.node["on" + b] = c
    },
    gradient: function (a, b, c, d) {
        var e = a.node,
            f = a.grad;
        f && this.D.remove(f);
        b = document.createElementNS(AmCharts.SVG_NS, b);
        f = AmCharts.getUniqueId();
        b.setAttribute("id", f);
        if (!isNaN(d)) {
                var g = 0,
                    h = 0,
                    k = 0,
                    l = 0;
                90 == d ? k = 100 : 270 == d ? l = 100 : 180 == d ? g = 100 : 0 === d && (h = 100);
                b.setAttribute("x1", g + "%");
                b.setAttribute("x2", h + "%");
                b.setAttribute("y1", k + "%");
                b.setAttribute("y2", l + "%")
            }
        for (d = 0; d < c.length; d++) g = document.createElementNS(AmCharts.SVG_NS, "stop"),
        h = 100 * d / (c.length - 1),
        0 === d && (h = 0),
        g.setAttribute("offset", h + "%"),
        g.setAttribute("stop-color", c[d]),
        b.appendChild(g);
        e.parentNode.appendChild(b);
        c = "#";
        AmCharts.baseHref && !AmCharts.isIE && (c = window.location.href + c);
        e.setAttribute("fill", "url(" + c + f + ")");
        a.grad = b
    },
    remove: function (a) {
        a.clipPath && this.D.remove(a.clipPath);
        a.grad && this.D.remove(a.grad);
        this.D.remove(a.node)
    }
});
AmCharts.AmDSet = AmCharts.Class({
    construct: function (a) {
        this.create("g")
    },
    attr: function (a) {
        this.R.attr(this.node, a)
    },
    move: function (a, b) {
        this.R.move(this.node, a, b)
    }
});